2013-03-31 2 views
0

PyCrypto 모듈을 사용하여 카운터 모드 암호화를 수행하기 위해 Python 함수를 생성합니다. 나는 내장 함수를 알고 있지만 직접 구현하려고합니다.PyCrypto AES 암호화가 예상대로 작동하지 않습니다.

나는 Test Vector #1 from RFC 3686을 시도하고 올바른 카운터 블록과 올바른 ASCII 형식의 키가 있습니다. 그러나 키를 사용하여 카운터 블록을 암호화 할 때 예상되는 키 스트림을 얻지 못합니다. 내 코드의

관련 부분 : 필요한 경우

cipher = AES.new(key) 
ctr_block = iv + nonce + ctr 
key_stream = base64.b64decode(cipher.encrypt(ctr_block)) 

내가 더 많은 코드를 제공 할 수 있습니다,하지만 난 잘 모르겠어요 어떻게 그들을 인쇄 할 때 ctr_blockkey 많은 물음표 문자가 있기 때문이다.

예상되는 답변을 얻지 못하는 이유는 무엇입니까? 모든 것이 제대로되어야하는 것처럼 보입니다. 아마도 문자열의 인코딩에 실수를했을 수도 있습니다.

편집

자가 포함 된 코드 :

from Crypto.Cipher import AES 
import base64 

def hex_to_str(hex_str): 
    return str(bytearray([int(n, 16) for n in hex_str.split()])) 

key = hex_to_str("AE 68 52 F8 12 10 67 CC 4B F7 A5 76 55 77 F3 9E") 
iv = hex_to_str("00 00 00 00 00 00 00 00") 
nonce = hex_to_str("00 00 00 30") 
ctr = hex_to_str("00 00 00 01") 

cipher = AES.new(key) 
ctr_block = iv + nonce + ctr 
key_stream = base64.b64decode(cipher.encrypt(ctr_block)) 

print "".join([hex(ord(char)) for char in key_stream]) 
# 0xd90xda0x72 
+0

테스트 할 수있는 예제를 제공하려면 적어도 "key", "iv", "nonce"및 "ctr"을 어떻게 작성했는지 표시해야합니다. – wRAR

+0

예제는 [Roland Smith 's code] (http://stackoverflow.com/a/15736125/805556)입니다. – LonelyWebCrawler

+0

아니요, 짧고 자체 포함 된 올바른 예가 아닙니다. – wRAR

답변

1

먼저 올바른 CTR 블록 순서는 nonce + iv + ctr입니다. 둘째, base64.b64decode 호출이 잘못되었습니다. cipher.encrypt은 디코딩 된 문자열을 생성합니다. 이 두 가지 픽스를 수정하면 올바른 키 스트림 인 코드 0xb70x600x330x280xdb0xc20x930x1b0x410xe0x160xc80x60x7e0x620xdf이 인쇄됩니다.

+0

예! 고맙습니다. 내가 오해 한 [블로그 게시물] (http://www.codekoala.com/blog/2009/aes-encryption-python-using-pycrypto/)에서 잘못된 'b64encode'부분을 얻었습니다. – LonelyWebCrawler

1

첫째, 사용 바이트 문자열 :

In [14]: keystring = "AE 68 52 F8 12 10 67 CC 4B F7 A5 76 55 77 F3 9E" 

In [15]: keystring.replace(' ', '').decode('hex') 
Out[15]: '\xaehR\xf8\x12\x10g\xccK\xf7\xa5vUw\xf3\x9e' 

둘째, 당신은 base64로 사용해서는 안됩니다.

+0

이것은 답변이 아니라 주석이어야합니다. – wRAR

+0

코드를 사용하여 나는 여전히 잘못된 대답을 얻습니다. 그러나, 나는 방금 뭔가를 발견했습니다 : 나의 keystream은 _ 세 문자입니다. – LonelyWebCrawler

+0

기능 주셔서 감사합니다,하지만 내 코드는 여전히 작동하지 않습니다. 내 편집을 참조하십시오. – LonelyWebCrawler

관련 문제