2013-07-08 6 views
7

저는 암호화가 새롭기 때문에 'ABC123'과 같은 간단한 문자열을 '3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d'과 같이 인코딩해야합니다. 나는이 시도보다, 내가 더 이상 뭔가가 필요간단한 문자열을 인코딩/디코딩하는 방법

>>> import base64 
>>> q = 'ABC123' 
>>> w = base64.encodestring(q) 
>>> w 
'QUJDMTIz\n' 

그러나 짧은입니다 :

는 내가 처음이 시도

>>> import hashlib 
>>> a = hashlib.sha224(q) 
>>> a.hexdigest() 
'3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d' 

이 좋은,하지만 지금은 방법을 모른다 그것을 다시 변환합니다. 어떤 사람이이 예제를 보거나 다른 것을 제안 할 수 있다면, 작은 문자열을 더 오랜 시간에 인코딩/디코딩 할 수있는 방법이 훌륭합니다. plockc 답변에 따라

UPDATE

나는 이런 짓을, 그리고 그것을 작동하는 것 같다 :

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 
+4

해시가 의미하는 바가 아닙니다. – SLaks

+2

보안은 _hard_입니다. 어떤 시나리오에서 방어하려고합니까? – SLaks

+0

계정 ID를 더 오래 인코딩해야하고 필요할 때 다시 디코딩해야합니다. – Vor

답변

3

을 당신은 아마 당신이 그것을 사용하려는 방법에 자세히 설명 할 필요가 왜, 그냥 가지고 Pandora의 상자를 열었습니다.

인코딩은 되돌릴 수 있으며 데이터를 다른 것 (텍스트 만 사용할 수있는 경우 기본 64 바이너리 데이터)으로 사용하려면 사용해야하며 해시 (예 : sha224)는 그렇지 않아야합니다. 거꾸로 할 수 있는.

사용자가 암호를 입력했는지 확인하려면 해시를 (sha224와 같이) 해시하고 저장 한 다음 사용자가 암호를 다시 입력하면 항목을 해시하고 비교합니다. 이것은 단순화 된 버전이며 간단한 "사전 공격"을 피하기 위해 "소금"을 추가해야합니다. 당신이 물어 본 질문이 아니기 때문에 나는 정교하지 않을 것입니다.

질문에 신속하게 대답하려면 비밀 키가있는 암호 AES-128과 같은 암호화 라이브러리가 필요하며 키를 사용하면 원래 데이터를 복구 할 수 있습니다. 라이브러리에서 키를 만드는 방법에 대한 세부 정보가있을 것입니다 (특정 길이 여야하고 길이를 조정할 수 있습니다). 키가 간단한 암호를 기반으로하는 경우 약한 암호에서 강력한 암호화 키를 만드는 PBKDF2를 확인하십시오.

hmac을 암호화로 혼동하지 마십시오 (hmac는 해싱 함수 sha224와 같은 다른 기능을 사용합니다). 메시지 수신자가 보낸 사람과 hmac 키를 공유하면 보낸 사람이 보낸 메시지를 "인증"할 수 있습니다 , 그리고 그것은 변경없이왔다.

행운을 빈다.

P. 암호화 엔지니어링 : 설계 원리 및 실제 응용 프로그램

인기 관련 대답

: https://stackoverflow.com/a/4948393/1322463

위키 백과 좋은 기사를 너무 가지고 당신이 정말로 파고 시작하려면 여기에 좋은 책이다.

+0

굉장합니다! 대단히 감사합니다. – Vor

관련 문제