python 에서 실 현 된 AES 양 방향 대칭 암호 화 복호화 와 용법 분석

이 사례 는 python 이 실현 한 AES 양 방향 대칭 암호 화 복호화 와 용법 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
고급 암호 화 표준(Advanced Encryption Standard,AES)은 암호학 에서 Rijndael 암호 화 법 이 라 고도 부 르 는데 미국 연방정부 가 사용 하 는 블록 암호 화 표준 이다.이 기준 은 기 존의 DES 를 대체 하 는 데 사용 되 었 으 며,이미 다방면으로 분석 되 어 전 세계 적 으로 널리 사용 되 고 있다.5 년 간 의 선별 절 차 를 거 쳐 고급 암호 화 기준 은 미국 국가 표준 기술 연구원(NIST)이 2001 년 11 월 26 일 FIPS PUB 197 에 발 표 했 고 2002 년 5 월 26 일 에 유효한 기준 이 되 었 다.2006 년 에 고급 암호 화 기준 은 대칭 키 암호 화 에서 가장 유행 하 는 알고리즘 중 하나 가 되 었 다.
AES 는 기본 알고리즘 일 뿐 AES 를 실현 하 는 데 몇 가지 모델 이 있다.그 중의 CBC 모드 는 안전성 때문에 TLS(https 의 암호 화 기준)와 IPSec(win 이 사용 하 는)를 기술 표준 으로 한다.쉽게 말 하면 CBC 는 암호 와 salt(교란 작용)를 사용 하여 고정 알고리즘(md5)에 따라 key 와 iv 를 생 성 한다.그 다음 에 key 와 iv(초기 벡터,첫 번 째 명문 암호 화)로 암호 화(명문)와 복호화(암호 화)를 합 니 다.
다음은 python 에서 실 현 된 AES 암호 화 복호화 인 스 턴 스 를 소개 합 니 다.여 기 는 CBC 모드 를 사용 하고 pycrypto 모듈 을 사 용 했 습 니 다.
설치:

pip install Crypto
pip install binascii

실현:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@author: rui.xu
#    pycrypto‎ 
#    :easy_install pycrypto‎
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class prpcrypt():
  def __init__(self,key):
    self.key = key
    self.mode = AES.MODE_CBC
  #    ,  text  16        16 ,
  #    16    16   ,     16   。
  def encrypt(self,text):
    cryptor = AES.new(self.key,self.mode,b'0000000000000000')
    #    key      16(AES-128),
    #24(AES-192),  32 (AES-256)Bytes   
    #  AES-128       
    length = 16
    count = len(text)
    if count < length:
      add = (length-count)
      #\0 backspace
      text = text + ('\0' * add)
    elif count > length:
      add = (length-(count % length))
      text = text + ('\0' * add)
    self.ciphertext = cryptor.encrypt(text)
    #  AES              ascii    ,                 
    #                 16     
    return b2a_hex(self.ciphertext)
  #   ,        strip()   
  def decrypt(self,text):
    cryptor = AES.new(self.key,self.mode,b'0000000000000000')
    plain_text = cryptor.decrypt(a2b_hex(text))
    return plain_text.rstrip('\0')
if __name__ == '__main__':
  pc = prpcrypt('keyskeyskeyskeys') #     
  import sys
  e = pc.encrypt(sys.argv[1]) #  
  d = pc.decrypt(e) #  
  print "  :",e
  print "  :",d

ValueError: IV must be 16 bytes long            windows 에서 기본적으로 이 오 류 를 보고 합 니 다.

cryptor = AES.new(self.key,self.mode,b'0000000000000000')
  예 를 들 어 뒤에 그 거 를 붙이면 OK.
PS:암호 화 복호화 에 관심 이 있 는 친 구 는 본 사이트 의 온라인 도 구 를 참고 할 수 있 습 니 다.
MD5 온라인 암호 화 도구:
http://tools.jb51.net/password/CreateMD5Password
천둥,급행열차,회오리 URL 암호 화/복호화 도구:
http://tools.jb51.net/password/urlrethunder
온라인 해시/해시 알고리즘 암호 화 도구:
http://tools.jb51.net/password/hash_encrypt
온라인 MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160 암호 화 도구:
http://tools.jb51.net/password/hash_md5_sha
온라인 sha 1/sha 224/sha 256/sha 384/sha 512 암호 화 도구:
http://tools.jb51.net/password/sha_encode
파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기