相关文章推荐
千杯不醉的小刀  ·  组织传播_百度百科·  10 月前    · 
英勇无比的石榴  ·  华纺股份有限公司走进纺织科学与工程学院-纺织 ...·  2 年前    · 
从未表白的围巾  ·  明朝钱币的铸行·  2 年前    · 
刚分手的卤蛋  ·  直抵人心最软处的旋律——访《武汉伢》词曲作者 ...·  2 年前    · 
逼格高的牛腩  ·  易卜拉欣·穆罕默德·萨利赫_搜狗百科·  2 年前    · 
Code  ›  pyDes 实现 Python 版的 DES 对称加密/解密开发者社区
python des
https://cloud.tencent.com/developer/article/1043971
从容的电梯
2 年前
作者头像
用户1177713
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 数据之美 > pyDes 实现 Python 版的 DES 对称加密/解密

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

作者头像
用户1177713
发布 于 2018-02-24 17:38:06
3.1K 0
发布 于 2018-02-24 17:38:06
举报

手头有个 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 sys
reload(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

 
推荐文章
千杯不醉的小刀  ·  组织传播_百度百科
10 月前
英勇无比的石榴  ·  华纺股份有限公司走进纺织科学与工程学院-纺织科学与工程(产业 ...
2 年前
从未表白的围巾  ·  明朝钱币的铸行
2 年前
刚分手的卤蛋  ·  直抵人心最软处的旋律——访《武汉伢》词曲作者谭旋-新华网
2 年前
逼格高的牛腩  ·  易卜拉欣·穆罕默德·萨利赫_搜狗百科
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号