背景:

因项目需要,需要将一个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;"&gt; dealKey
    </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; self.iv = iv</span>
    self.mode =<span style="color: #000000;"&gt; AES.MODE_ECB
    self.BS </span>=<span style="color: #000000;"&gt; AES.block_size
    </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 补位</span>
    self.pad = <span style="color: #0000ff;"&gt;lambda</span> s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) %<span style="color: #000000;"&gt; self.BS)
    self.unpad </span>= <span style="color: #0000ff;"&gt;lambda</span> s: s[0:-ord(s[-1<span style="color: #000000;"&gt;])]

</span><span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; encrypt(self,text):
    text </span>=<span style="color: #000000;"&gt; self.pad(text)
    cryptor </span>=<span style="color: #000000;"&gt; AES.new(self.key,self.mode)
    </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 目前AES-128 足够目前使用</span>
    ciphertext =<span style="color: #000000;"&gt; cryptor.encrypt(text)
    </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 把加密后的字符串转化为16进制字符串</span>
    <span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; b2a_hex(ciphertext)

</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 解密后,去掉补足的空格用strip() 去掉</span>
<span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; decrypt(self,text):
    cryptor </span>=<span style="color: #000000;"&gt; AES.new(self.key,self.mode)
    plain_text </span>=<span style="color: #000000;"&gt; cryptor.decrypt(a2b_hex(text))
    </span><span style="color: #0000ff;"&gt;return</span> self.unpad(plain_text.rstrip(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;\0</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;))

<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;"&gt; dealKey
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; self.iv = iv</span>
self.mode =<span style="color: #000000;"&gt; AES.MODE_ECB
self.BS </span>=<span style="color: #000000;"&gt; AES.block_size
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 补位</span>
self.pad = <span style="color: #0000ff;"&gt;lambda</span> s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) %<span style="color: #000000;"&gt; self.BS)
self.unpad </span>= <span style="color: #0000ff;"&gt;lambda</span> s: s[0:-ord(s[-1<span style="color: #000000;"&gt;])]

</span><span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; encrypt(self,text):
text </span>=<span style="color: #000000;"&gt; self.pad(text)
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;finalkey=bytes([239,159,125,206,247,119,225,116,254,91,100,130,255,144,207,70])</span>
cryptor =<span style="color: #000000;"&gt; AES.new(bytes(self.key),self.mode)
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 目前AES-128 足够目前使用</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;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;"&gt;#</span><span style="color: #008000;"&gt;ss=text.encode()</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;print(a2b_hex(ss))</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;print(a2b_hex(ss))</span>
ciphertext = cryptor.encrypt(text.encode(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;utf-8</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;))
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 把加密后的字符串转化为16进制字符串</span>
<span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; b2a_hex(ciphertext)

</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 解密后,去掉补足的空格用strip() 去掉</span>
<span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; decrypt(self,self.mode)
plain_text </span>=<span style="color: #000000;"&gt; cryptor.decrypt(a2b_hex(text))
</span><span style="color: #0000ff;"&gt;return</span> self.unpad(plain_text.rstrip(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;\0</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;))

<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()

dawei

【声明】:唐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。