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

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

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

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

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

下面直接上代码吧~

1、Java 版

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

2、Python 版
# -*- coding:utf-8 -*-
import sysreload(sys)
sys.setdefaultencoding('utf-8')
from pyDes import *
from binascii import b2a_hex, a2b_hex# For Python3, you'll need to use bytes, i.e.:
#   data = b"Please encrypt my data"
#   k = des(b"DESCRYPT", CBC, b"\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)data = 'https://mail.google.com/mail/u/0/#inbox/a1ed0e2f6f28e06b4361'
KEY = "test_KEY"    #密钥
IV = "test__IV"     #偏转向量
# 使用DES对称加密算法的CBC模式加密
k = des(KEY, CBC, IV, pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)
print b2a_hex(d)
print "Decrypted: %r" % k.decrypt(d)#结果:
#886f930f65f29132f6ace2683c448b5580d681a1fec3fc91cf3161f074b53b935d1c8fe80f99201077b36f923a42ac0e05cabe579308fda08d8ff463ad334677
#Decrypted: ' 

#或者单行命令如下:
python -c 'from pyDes import *;from binascii import a2b_hex;import sys;print des("test_KEY", CBC, "test__IV", pad=None, padmode=PAD_PKCS5).decrypt(a2b_hex(sys.stdin.readlines()[0].strip()))' <<<886f930f65f29132f6ace2683c448b5580d681a1fec3fc91cf3161f074b53b935d1c8fe80f99201077b36f923a42ac0e05cabe579308fda08d8ff463ad334677
#https://mail.google.com/mail/u/0/#inbox/a1ed0e2f6f28e06b4361

3、Refer

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

http://www.cnblogs.com/SunboyL/p/pyDes.html

[2] Cryptography and Python

http://lenciel.cn/2013/07/cryptography-and-python/

[3] 加密解密工具类 EncryptUtil

http://uule.iteye.com/blog/1925046

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

https://gist.github.com/doublereedkurt/3921909

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

http://www.simonzhang.net/?p=1903

[6] 数据加密算法

http://baike.baidu.com/view/878529.htm

[7] 非对称加密算法

http://baike.baidu.com/view/1490349.htm

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

http://python.jobbole.com/84094/

转载于:https://www.cnblogs.com/davidwang456/p/8964016.html

pyDes 实现 Python 版的 DES 对称加密/解密--转相关推荐

  1. 古典密码学、DES对称加密、3DES对称加密知识总结和实验

    实验三.古典密码学.DES对称加密.3DES对称加密 一.古典密码学:当铺密码.培根密码.摩斯密码.键盘密码.与佛论禅 1.当铺密码: 解密"由人俱一口中"和"大中口由人 ...

  2. Java和.NET使用DES对称加密的区别

    Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...

  3. java des ecb_java DES ECB模式对称加密解密

    最近需要又要使用DES加密数据,要求DES加密出来的数据为对称加密,经过研究,发现了一些问题: 1.DES对称ECB模式加密的数据,长度必须为8的倍数 2.加密的数据,加密后先转码(因为加密后的数据我 ...

  4. java des ecb_【转】 java DES ECB模式对称加密解密

    最近需要又要使用DES加密数据,要求DES加密出来的数据为对称加密,经过研究,发现了一些问题: 1.DES对称ECB模式加密的数据,长度必须为8的倍数 2.加密的数据,加密后先转码(因为加密后的数据我 ...

  5. Android 平台DES IV 加密解密随笔

    Android 平台DES IV 加密解密随笔 DES加密接触过好多次了,但总容易忘,和服务器交互时,加出来不一致后面能解密成功但是头部是乱码导致小坑了一会,这次记录下来~ 根据网上资料和自己的理解, ...

  6. .NET中的DES对称加密

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...

  7. DES对称加密(1)算法说明

    DES数据加密标准(Data Encryption Standard) 又称作DEA(Data Encryption Algorithm) , 它由霍斯特·费斯妥Horst Feistel设计,又名 ...

  8. java des对称加密_JAVA加密解密DES对称加密算法

    1 下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子.2 3 首先,生成一个密钥KEY.4 我把它保存到key.txt中.这个文件就象是一把钥匙.谁拥有它,谁就能解开我 ...

  9. 密码学课程设计之DES对称加密

    前言 最近在进行密码学课程设计, 感觉拿python进行设计会显得比较简洁易懂,本人python比较渣渣,所以就拿出来练一练.用零零碎碎的时间写了五六天才把主干部分写完,真是菜哭我自己了.在此还需要感 ...

最新文章

  1. CentOS 6.3 安装 samba 共享
  2. Ubuntu下dex2jar的安装和使用
  3. linux ssh命令详解
  4. day 96 关于分页的使用
  5. 4.3 Siamese 网络
  6. Go语言同步和异步执行多个任务封装
  7. 在 Mac 上的登录窗口中如何打开辅助功能选项?
  8. Matlab R2020a安装教程(附赠免费的安装包)
  9. java出现圅_java获取汉字拼音首字母A
  10. Struts2实现文件上传和下载
  11. 使用modelsim仿真时出现“vopt returned success but vsim could not find a design to simulate!”错误
  12. 披着“云”衣裳的狗——搜狗输入法“云”版本尝鲜记
  13. Ozone Block Chunk文件的layout方式
  14. 获取淘宝/天猫购买到商品的订单详情——buyer_order_detail
  15. 免费微信小程序,发一发打造微信小程序Saas营销服务移动工具箱
  16. smallworld 下的magik module 的logger和service provider
  17. 华为鸿蒙手机用大卡还是小卡,教你解决SIM卡剪卡导致华为P8手机不识卡的问题...
  18. 未明学院学员报告:「看电影攻略」之豆瓣电影票房与口碑分析,这几类电影不易踩雷!
  19. php 使用api接口测试工具,php API接口如何进行测试 - Codeception
  20. 【Python任务导向】处理数据(Pandas)

热门文章

  1. python构造和析构_python魔法方法 构造和析构实例讲解
  2. unity中单位是米还是厘米_数学单位换算公式口诀
  3. matlab div矩阵运算,【求助】多维矩阵求和运算!!
  4. linux 防火墙开启1521端口,linux防火墙开放1521端口
  5. python 删除一段话中某一个字符串开始之后的所有字符串
  6. php mysql隔离_mysql隔离级别有几种
  7. 在tomcat新建html页面,仅将HTML,CSS网页部署到Tomcat(示例代码)
  8. 山东春考计算机专科学校排名,山东春考本科专科学校有哪些
  9. oracle11g数据文件路径,oracle11g修改数据文件路径
  10. 华为鸿蒙适配计划,华为鸿蒙适配计划提前曝光,快看看有你的机型吗?