Tôi rất mới để mã hóa, tôi cần phải mã hóa một chuỗi đơn giản như 'ABC123'
thành một cái gì đó tương tự như '3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d'
.làm thế nào để mã hóa/giải mã một chuỗi đơn giản
đầu tiên tôi đã cố gắng này:
>>> import base64
>>> q = 'ABC123'
>>> w = base64.encodestring(q)
>>> w
'QUJDMTIz\n'
Nhưng nó để ngắn, tôi cần một cái gì đó còn hơn là tôi đã cố gắng này:
>>> import hashlib
>>> a = hashlib.sha224(q)
>>> a.hexdigest()
'3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d'
này là tốt, nhưng bây giờ tôi không biết làm thế nào để chuyển đổi nó trở lại. Nếu ai đó có thể giúp tôi eather với ví dụ này hoặc gợi ý cái gì khác, làm thế nào tôi có thể mã hóa/giải mã một chuỗi nhỏ thành một cái gì đó lâu hơn, sẽ là tuyệt vời.
CẬP NHẬT
dựa trên plockc
câu trả lời tôi đã làm điều này, và có vẻ như để làm việc:
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
Đó không phải là ý nghĩa của hàm băm. – SLaks
Bảo mật là _hard_. Bạn đang cố bảo vệ kịch bản nào? – SLaks
Tôi cần mã hóa một id tài khoản thành một cái gì đó dài hơn và giải mã nó trở lại khi tôi cần nó. – Vor