加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > Python > 正文

java代码实现python2中aes加密经历

发布时间:2020-07-29 11:34:39 所属栏目:Python 来源:互联网
导读:背景: 因项目需要,需要将一个python2编写的aes加密方式改为java实现。1.源python2实现from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_heximport hashlibimport urllibclass aesCrypt():def __init__(self, undealKey):key = turnMd5(unde

背景:

因项目需要,需要将一个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;</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;</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()

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读