[컴][파이썬] python 에서 AES 사용법

파이썬 AES 사용법 / AES 예제



python 에서 AES 사용법

update 2023-08-24:

이제 PyCrypto 모듈은 더이상 maintain 되지 않는다. 

PyCrypto

PyCrypto module 을 사용한다.
pip install pycrypto

windows pycrypto binary 는 아래 링크에서 가져오면 된다.


example

>>> from Crypto.Cipher import AES
>>> from Crypto.Util import Counter
>>>
>>> key = b''*16
>>> pt = b''*1000000
>>> ctr = Counter.new(128)
>>> cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
>>> ct = cipher.encrypt(pt)

출처 : https://www.dlitz.net/software/pycrypto/api/current/Crypto.Util.Counter-module.html



Counter

counter 는 여기를 보면 이해가 좀 쉽다. counter mode 에서는 key 와 counter 값(1,2,3,4,...)를 input 으로 받아서 AES encrypt 를 하는데, 이렇게 되면 언제나 같은 sequence 의 결과가 나온다. 그래서 counter 와 nonce (매번 unique 한 값)와 counter 의 값을 합해서 이것과 key 를 input 으로 해서 AES encrypt 를 한다.

하지만 만약 계속 다른 key 를 사용하는 것이라면 굳이 nonce+counter 가 매번 다를 필요는 없다.(참고)

size

Counter.new(128)
counter 의 size 는 AES CTR mode 의 block 크기인 16byte 가 되어야 한다. 아니면 error 가 난다.

Counter.new(120, prefix=b'A')
만약 위와 같이 prefix 를 1byte 넣었다면, Counter 의 nbit 은 15byte(120bit) 가 되어야 한다. 참고로 byte 단위로 쪼개지기 때문에 nbit 는 8의 배수로 설정되어야 한다. 안그러면 error 가 난다.

AES CTR mode

aes-ctr.py
python f:\aes-ctr.py -i f:\input.txt -o ciphertext -k abcdef1234567890abcdef1234567890 -iv 01010101010101010101010101010101


openssl
openssl.exe enc -aes-128-ctr -in f:\input.txt -out f:\output.openssl.txt -K abcdef1234567890abcdef1234567890 -iv 01010101010101010101010101010101




See Also

  1. 암호화의 두가지 방식 - 대칭키 방식, 공개키 방식
  2. AES Rijndael Cipher explained as a Flash animation : animation 으로 AES 를 설명
  3. aes tutorial, cryptography Advanced Encryption Standard AES Tutorial,fips 197 - YouTube : 영어로 설명
  4. https://dmyz.org/en/archives/1182 : php, python, js 에서 같은 암호화 값을 얻는 예제, CBC mode
  5. from php openssl to pycrypto (CTR mode) : php 의 openssl 을 pyrypto 로 변경할 때

댓글 없음:

댓글 쓰기