| 
                         背景: 
 因项目需要,需要将一个python2编写的aes加密方式改为java实现。 
1.源python2实现 
 Crypto.Cipher  binascii <span style="color: #0000ff;">class<span style="color: #000000;"> aesCrypt(): 
<span style="color: #0000ff;">def <span style="color: #800080;">init<span style="color: #000000;">(self,undealKey): 
key =<span style="color: #000000;"> turnMd5(undealKey) 
<span style="color: #0000ff;">print<span style="color: #000000;"> undealKey 
dealKey =<span style="color: #000000;"> dealKeyAndIV(key.lower())
    self.key </span>=<span style="color: #000000;"> dealKey
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> self.iv = iv</span>
    self.mode =<span style="color: #000000;"> AES.MODE_ECB
    self.BS </span>=<span style="color: #000000;"> AES.block_size
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> 补位</span>
    self.pad = <span style="color: #0000ff;">lambda</span> s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) %<span style="color: #000000;"> self.BS)
    self.unpad </span>= <span style="color: #0000ff;">lambda</span> s: s[0:-ord(s[-1<span style="color: #000000;">])]
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> encrypt(self,text):
    text </span>=<span style="color: #000000;"> self.pad(text)
    cryptor </span>=<span style="color: #000000;"> AES.new(self.key,self.mode)
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> 目前AES-128 足够目前使用</span>
    ciphertext =<span style="color: #000000;"> cryptor.encrypt(text)
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> 把加密后的字符串转化为16进制字符串</span>
    <span style="color: #0000ff;">return</span><span style="color: #000000;"> b2a_hex(ciphertext)
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 解密后,去掉补足的空格用strip() 去掉</span>
<span style="color: #0000ff;">def</span><span style="color: #000000;"> decrypt(self,text):
    cryptor </span>=<span style="color: #000000;"> AES.new(self.key,self.mode)
    plain_text </span>=<span style="color: #000000;"> cryptor.decrypt(a2b_hex(text))
    </span><span style="color: #0000ff;">return</span> self.unpad(plain_text.rstrip(<span style="color: #800000;">'</span><span style="color: #800000;"> </span><span style="color: #800000;">'</span><span style="color: #000000;">)) 
<span style="color: #0000ff;">def<span style="color: #000000;"> turnHex(character): 
<span style="color: #000000;"><略> 
<span style="color: #0000ff;">def<span style="color: #000000;"> debugPrint(str): 
<span style="color: #0000ff;">print<span style="color: #000000;"> str 
<span style="color: #0000ff;">def<span style="color: #000000;"> dealKeyAndIV(undealKey):<略> 
2.经历 
 1. 我只有python3的环境,因使用到 
Crypto这个package的很难安装上去,经过多种尝试,使用替代,故需要修改部分代码 
 2. 改成python3的文件 
 Crypto.Cipher  binascii ==    self.key </span>=<span style="color: #000000;"> dealKey
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> self.iv = iv</span>
    self.mode =<span style="color: #000000;"> AES.MODE_ECB
    self.BS </span>=<span style="color: #000000;"> AES.block_size
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> 补位</span>
    self.pad = <span style="color: #0000ff;">lambda</span> s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) %<span style="color: #000000;"> self.BS)
    self.unpad </span>= <span style="color: #0000ff;">lambda</span> s: s[0:-ord(s[-1<span style="color: #000000;">])]
</span><span style="color: #0000ff;">def</span><span style="color: #000000;"> encrypt(self,text):
    text </span>=<span style="color: #000000;"> self.pad(text)
    </span><span style="color: #008000;">#</span><span style="color: #008000;">finalkey=bytes([239,159,125,206,247,119,225,116,254,91,100,130,255,144,207,70])</span>
    cryptor =<span style="color: #000000;"> AES.new(bytes(self.key),self.mode)
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> 目前AES-128 足够目前使用</span>
    <span style="color: #008000;">#</span><span style="color: #008000;">ss=bytes([67,122,99,115,81,111,68,112,67,47,75,48,108,98,90,88,87,52,65,43,105,83,72,109,55,110,54,102,85,89,84,56,117,120,79,78,70,69,104,97,57,49,113,66,77,107,74,71,106,103,86,82,51,53,118,73,76,114,61,4,4])</span>
    <span style="color: #008000;">#</span><span style="color: #008000;">ss=text.encode()</span>
    <span style="color: #008000;">#</span><span style="color: #008000;">print(a2b_hex(ss))</span>
    <span style="color: #008000;">#</span><span style="color: #008000;">print(a2b_hex(ss))</span>
    ciphertext = cryptor.encrypt(text.encode(<span style="color: #800000;">"</span><span style="color: #800000;">utf-8</span><span style="color: #800000;">"</span><span style="color: #000000;">))
    </span><span style="color: #008000;">#</span><span style="color: #008000;"> 把加密后的字符串转化为16进制字符串</span>
    <span style="color: #0000ff;">return</span><span style="color: #000000;"> b2a_hex(ciphertext)
</span><span style="color: #008000;">#</span><span style="color: #008000;"> 解密后,去掉补足的空格用strip() 去掉</span>
<span style="color: #0000ff;">def</span><span style="color: #000000;"> decrypt(self,self.mode)
    plain_text </span>=<span style="color: #000000;"> cryptor.decrypt(a2b_hex(text))
    </span><span style="color: #0000ff;">return</span> self.unpad(plain_text.rstrip(<span style="color: #800000;">'</span><span style="color: #800000;"> </span><span style="color: #800000;">'</span><span style="color: #000000;">))
<span style="color: #0000ff;">def<span style="color: #000000;"> turnHex(character): 
value =<span style="color: #000000;"> ord(character) 
<span style="color: #008000;">#<span style="color: #008000;"> print value 
temp = value - 48 
<span style="color: #0000ff;">if value - 48 > 9<span style="color: #000000;">: 
<span style="color: #0000ff;">if (value - 97 <= 5) & (value - 97 >=<span style="color: #000000;"> 0): 
temp = value - 87 
<span style="color: #0000ff;">return<span style="color: #000000;"> temp<span style="color: #0000ff;">def<span style="color: #000000;"> dealKeyAndIV(undealKey): 
flag =<span style="color: #000000;"> 0 
<span style="color: #ff0000;"> result<span style="color: #ff0000;">=[] 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint 'len=',len(undealKey)/2 
<span style="color: #0000ff;">while flag < len(undealKey)/2<span style="color: #000000;">: 
characterH = undealKey[flag2<span style="color: #000000;">] 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint characterH 
highBit = turnHex(characterH)  16 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint highBit 
characterL = undealKey[flag*2+1<span style="color: #000000;">] 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint characterL 
lowBit =<span style="color: #000000;"> turnHex(characterL) 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint lowBit 
ascValue = highBit+<span style="color: #000000;">lowBit 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint ascValue 
<span style="color: #ff0000;">        result.append(ascValue) 
<span style="color: #008000;">#<span style="color: #008000;"> debugPrint result 
flag += 1 
<span style="color: #008000;">#<span style="color: #008000;"> print '-------' 
<span style="color: #0000ff;">return<span style="color: #000000;"> result<span style="color: #0000ff;">def<span style="color: #000000;"> turnMd5(str): 
m2 =<span style="color: #000000;"> hashlib.md5() 
<span style="color: #ff0000;">data <span style="color: #ff0000;">= str.encode(encoding="utf-8"<span style="color: #000000;"><span style="color: #ff0000;">) 
m2.update(data) 
<span style="color: #0000ff;">return m2.hexdigest() 
                        (编辑:莱芜站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |