comment coder/décoder une chaîne simple
Je suis très nouveau pour le chiffrement, j'ai besoin de coder une simple chaîne de caractères comme 'ABC123'
dans quelque chose de similaire à '3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d'
.
J'ai d'abord essayé ceci:
>>> import base64
>>> q = 'ABC123'
>>> w = base64.encodestring(q)
>>> w
'QUJDMTIz\n'
Mais c'est court, j'ai besoin de quelque chose de plus, que j'ai essayé ceci:
>>> import hashlib
>>> a = hashlib.sha224(q)
>>> a.hexdigest()
'3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d'
C'est bien, mais maintenant je ne sais pas comment faire pour le convertir en arrière. Si quelqu'un peut m'aider feather avec cet exemple ou de proposer quelque chose d'autre, comment je peux encoder/décoder une petite chaîne en quelque chose de plus, ce serait génial.
Mise à JOUR
basé sur plockc
réponse je l'ai fait, et il semble fonctionner:
from Crypto.Cipher import AES # encryption library
BLOCK_SIZE = 32
# the character used for padding--with a block cipher such as AES, the value
# you encrypt must be a multiple of BLOCK_SIZE in length. This character is
# used to ensure that your value is always a multiple of BLOCK_SIZE
PADDING = '{'
# one-liner to sufficiently pad the text to be encrypted
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
# one-liners to encrypt/encode and decrypt/decode a string
# encrypt with AES, encode with base64
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
# create a cipher object using the random secret
cipher = AES.new('aaaaaaaaaa123456')
# encode a string
encoded = EncodeAES(cipher, 'ABC123')
print 'Encrypted string: %s' % encoded
# decode the encoded string
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string: %s' % decoded
Ce n'est pas un hachage de moyens.
La sécurité est dur. Quel est le scénario qui êtes-vous essayer de se défendre?
J'ai besoin de coder un id de compte en quelque chose de plus et de le décoder lorsque j'en ai besoin.
Ce que les attaquants êtes-vous essayer de se défendre contre? Voulez-vous avoir une clé secrète? Voulez-vous empêcher la mutation?
Oui, je pense que j'ai besoin d'une clé secrète.... Quelque chose qui me permettra d'encoder et de décoder de retour
La sécurité est dur. Quel est le scénario qui êtes-vous essayer de se défendre?
J'ai besoin de coder un id de compte en quelque chose de plus et de le décoder lorsque j'en ai besoin.
Ce que les attaquants êtes-vous essayer de se défendre contre? Voulez-vous avoir une clé secrète? Voulez-vous empêcher la mutation?
Oui, je pense que j'ai besoin d'une clé secrète.... Quelque chose qui me permettra d'encoder et de décoder de retour
OriginalL'auteur Vor | 2013-07-08
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement besoin de donner des précisions sur la façon dont vous allez l'utiliser et pourquoi, comme vous l'avez ouvert la boîte de Pandore 🙂
Un codage est réversible et ne doit être utilisé pour rendre les données s'insèrent dans quelque chose d'autre (comme en base 64 données binaires lorsque vous ne pouvez utiliser le texte), une table de hachage (comme sha224) n'est pas censé être réversible.
Si vous voulez vérifier un utilisateur d'entrer un mot de passe, vous hachage (avec comme sha224) et de stocker la table de hachage, puis quand l'utilisateur entre un mot de passe à nouveau, vous hachage de leur entrée et de comparer. C'est la version simplifiée, vous devez également ajouter le "sel" pour éviter un simple "attaque par dictionnaire". Je ne m'étendrai pas que ce n'était pas la question.
De rapidement répondre à votre question, vous voulez une librairie de chiffrement, comme l'algorithme de chiffrement AES-128, ce qui a une clé secrète et avec la touche vous pouvez récupérer les données d'origine. Il y aura quelques détails dans la bibliothèque sur la façon de créer la clé (il doit être d'une durée spécifique et sera manipulé à cette longueur). Si votre clé est basée sur de simples mots de passe, allez regarder PBKDF2, ce qui rend une solide clé de chiffrement à partir d'un mot de passe faible.
Ne pas confondre hmac que le cryptage (hmac utilise une autre fonction, comme la fonction de hachage sha224), si le récepteur d'un message en actions d'une clé hmac avec l'expéditeur, ils peuvent "s'authentifier" que le message de l'expéditeur, et il est venu sans altération.
Bonne chance!
P. S. ici est un bon livre si vous voulez vraiment commencer à creuser dans:
La cryptographie Ingénierie: Principes de Conception et les Applications Pratiques
Populaire liée réponse:
https://stackoverflow.com/a/4948393/1322463
Wikipédia a de bons articles.
OriginalL'auteur plockc