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

pyDes 实现 Python 版的 DES 对称加密/解密--转

发布时间:2020-07-29 05:43:29 所属栏目:Python 来源:互联网
导读:https://my.oschina.net/leejun2005/blog/586451手头有个 Java 版的 DES 加密/解密程序,最近想着将其 Python 重构下,方便后续脚本解析,捣鼓了两下 pyDes 貌似很方便,不过据网上其他同学测试说PyCrypto 性能要比 pyDes 高一个数量级,这里我没有做具体性能

https://my.oschina.net/leejun2005/blog/586451

手头有个 Java 版的 DES 加密/解密程序,最近想着将其 Python 重构下,方便后续脚本解析,捣鼓了两下 pyDes 貌似很方便,不过据网上其他同学测试说PyCrypto 性能要比 pyDes 高一个数量级,这里我没有做具体性能测试,也没有选用 PyCrypto主要原因有三:

(1)PyCrypto 在 windows 下依赖 VC++9.0,安装麻烦

(2)PyCrypto 默认不支持padmode,且对秘钥以及偏转向量长度有严格要求,扩展性很差

(3)不是用来搞暴力破解,性能要求不高,所以就不关注性能了,能用就行 ^ _ ^

下面直接上代码吧~

String strKey = "test_KEY",strParam = "test__IV" String desEncrypt(String source) (source == || source.length() == 0 = Cipher.getInstance("DES/CBC/PKCS5Padding"= DESKeySpec(strKey.getBytes("UTF-8"= SecretKeyFactory.getInstance("DES"== IvParameterSpec(strParam.getBytes("UTF-8""UTF-8"</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> String desDecrypt(String source) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; Exception { </span><span style="color: #0000ff;"&gt;if</span> (source == <span style="color: #0000ff;"&gt;null</span> || source.length() == 0<span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;byte</span>[] src =<span style="color: #000000;"&gt; StringHelper.fromHexString(source); Cipher cipher </span>= Cipher.getInstance("DES/CBC/PKCS5Padding"<span style="color: #000000;"&gt;); DESKeySpec desKeySpec </span>= <span style="color: #0000ff;"&gt;new</span> DESKeySpec(strKey.getBytes("UTF-8"<span style="color: #000000;"&gt;)); SecretKeyFactory keyFactory </span>= SecretKeyFactory.getInstance("DES"<span style="color: #000000;"&gt;); SecretKey secretKey </span>=<span style="color: #000000;"&gt; keyFactory.generateSecret(desKeySpec); IvParameterSpec iv </span>= <span style="color: #0000ff;"&gt;new</span> IvParameterSpec(strParam.getBytes("UTF-8"<span style="color: #000000;"&gt;)); cipher.init(Cipher.DECRYPT_MODE,iv); </span><span style="color: #0000ff;"&gt;byte</span>[] retByte =<span style="color: #000000;"&gt; cipher.doFinal(src); </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; String(retByte); } </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> main(String[] args) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; Exception { System.out .println(EncryptHelper .desDecrypt(</span>"886f930f65f29132f6ace2683c448b5580d681a1fec3fc91cf3161f074b53b935d1c8fe80f99201077b36f923a42ac0e05cabe579308fda08d8ff463ad334677"<span style="color: #000000;"&gt;)); System.out.println(EncryptHelper.desEncrypt(</span>"https://mail.google.com/mail/u/0/#inbox/a1ed0e2f6f28e06b4361"<span style="color: #000000;"&gt;)); }

}

<span style="color: #008000;">//<span style="color: #008000;">结果:
<span style="color: #008000;">//<span style="color: #008000; text-decoration: underline;">https://mail.google.com/mail/u/0/<span style="color: #008000;">#inbox/a1ed0e2f6f28e06b4361
<span style="color: #008000;">//<span style="color: #008000;">886F930F65F29132F6ACE2683C448B5580D681A1FEC3FC91CF3161F074B53B935D1C8FE80F99201077B36F923A42AC0E05CABE579308FDA08D8FF463AD334677

2、Python 版
# -*- coding:utf-8 -*- reload(sys)
sys.setdefaultencoding('utf-8'<span style="color: #000000;">)
from pyDes <span style="color: #0000ff;">import *<span style="color: #000000;">
from binascii <span style="color: #0000ff;">import<span style="color: #000000;"> b2a_hex,a2b_hex

For Python3,you'll need to use bytes,i.e.:

data = b"Please encrypt my data"<span style="color: #000000;">

k = des(b"DESCRYPT",CBC,b"",pad=None,padmode=<span style="color: #000000;">PAD_PKCS5)

data = 'https://mail.google.com/mail/u/0/#inbox/a1ed0e2f6f28e06b4361'<span style="color: #000000;">
KEY = "test_KEY"<span style="color: #000000;"> #密钥
IV = "test__IV"<span style="color: #000000;"> #偏转向量

使用DES对称加密算法的CBC模式加密

k = des(KEY,IV,padmode=<span style="color: #000000;">PAD_PKCS5)
d =<span style="color: #000000;"> k.encrypt(data)
print b2a_hex(d)
print "Decrypted: %r" %<span style="color: #000000;"> k.decrypt(d)

结果:

886f930f65f29132f6ace2683c448b5580d681a1fec3fc91cf3161f074b53b935d1c8fe80f99201077b36f923a42ac0e05cabe579308fda08d8ff463ad334677

Decrypted: '

<span style="color: #000000;">

或者单行命令如下:

python -c 'from pyDes import *;from binascii import a2b_hex;import sys;print des("test_KEY","test__IV",padmode=PAD_PKCS5).decrypt(a2b_hex(sys.stdin.readlines()[0].strip()))' <<<<span style="color: #000000;">886f930f65f29132f6ace2683c448b5580d681a1fec3fc91cf3161f074b53b935d1c8fe80f99201077b36f923a42ac0e05cabe579308fda08d8ff463ad334677

https:<span style="color: #008000;">//<span style="color: #008000;">mail.google.com/mail/u/0/#inbox/a1ed0e2f6f28e06b4361

<h1 id="h1_2">3、Refer

[1]pyDes库 实现python的des加密

[2]Cryptography and Python

[3]加密解密工具类 EncryptUtil

[4]implementing DES-X (mode CBC) using PyCrypto

[5]python 对字符串的加密解密

[6]数据加密算法

[7]非对称加密算法

[8]Pycrypto与RSA密码技术笔记

(编辑:莱芜站长网)

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

    推荐文章
      热点阅读