python - matplotlib xticks
¿Usando DPAPI con Python? (3)
¿Hay alguna forma de utilizar DPAPI (Interfaz de programación de aplicaciones de protección de datos) en Windows XP con Python?
Preferiría usar un módulo existente si hay alguno que pueda hacerlo. Lamentablemente, no he podido encontrar la manera de usar Google o Stack Overflow.
EDITAR: He tomado el código de ejemplo señalado por "dF" y lo puse en una biblioteca independiente que se puede usar simplemente en un nivel alto para cifrar y descifrar usando DPAPI en modo de usuario. Simplemente llame a dpapi.cryptData (text_to_encrypt) que devuelve una cadena encriptada, o al inverso decryptData (encrypted_data_string), que devuelve el texto sin formato. Aquí está la biblioteca:
# DPAPI access library
# This file uses code originally created by Crusher Joe:
# http://article.gmane.org/gmane.comp.python.ctypes/420
#
from ctypes import *
from ctypes.wintypes import DWORD
LocalFree = windll.kernel32.LocalFree
memcpy = cdll.msvcrt.memcpy
CryptProtectData = windll.crypt32.CryptProtectData
CryptUnprotectData = windll.crypt32.CryptUnprotectData
CRYPTPROTECT_UI_FORBIDDEN = 0x01
extraEntropy = "cl;ad13 /0al;323kjd #(adl;k$#ajsd"
class DATA_BLOB(Structure):
_fields_ = [("cbData", DWORD), ("pbData", POINTER(c_char))]
def getData(blobOut):
cbData = int(blobOut.cbData)
pbData = blobOut.pbData
buffer = c_buffer(cbData)
memcpy(buffer, pbData, cbData)
LocalFree(pbData);
return buffer.raw
def Win32CryptProtectData(plainText, entropy):
bufferIn = c_buffer(plainText, len(plainText))
blobIn = DATA_BLOB(len(plainText), bufferIn)
bufferEntropy = c_buffer(entropy, len(entropy))
blobEntropy = DATA_BLOB(len(entropy), bufferEntropy)
blobOut = DATA_BLOB()
if CryptProtectData(byref(blobIn), u"python_data", byref(blobEntropy),
None, None, CRYPTPROTECT_UI_FORBIDDEN, byref(blobOut)):
return getData(blobOut)
else:
return ""
def Win32CryptUnprotectData(cipherText, entropy):
bufferIn = c_buffer(cipherText, len(cipherText))
blobIn = DATA_BLOB(len(cipherText), bufferIn)
bufferEntropy = c_buffer(entropy, len(entropy))
blobEntropy = DATA_BLOB(len(entropy), bufferEntropy)
blobOut = DATA_BLOB()
if CryptUnprotectData(byref(blobIn), None, byref(blobEntropy), None, None,
CRYPTPROTECT_UI_FORBIDDEN, byref(blobOut)):
return getData(blobOut)
else:
return ""
def cryptData(text):
return Win32CryptProtectData(text, extraEntropy)
def decryptData(cipher_text):
return Win32CryptUnprotectData(cipher_text, extraEntropy)
He estado usando CryptProtectData
y CryptUnprotectData
través de ctypes, con el código de
http://article.gmane.org/gmane.comp.python.ctypes/420
y ha estado funcionando bien.
La forma más fácil sería usar Iron Python .
Además, pywin32 implementa CryptProtectData y CryptUnprotectData en el módulo win32crypt.