单纯记录一下Python中DES加密解密的使用方式直接看代码:

依赖pyDes库安装> pip install pyDes

约定秘钥

python和java 加密和解密联调,兼容中文字符串

Python代码段

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# encoding:utf-8

# @Author : Benjamin

# @Time : 2020/7/15 15:47

# des模式 填充方式 ECB加密方式

from pyDes import des, PAD_PKCS5, ECB

# 秘钥 (如果和Java对接,两边要有相同的秘钥)

DES_KEY = "test*key*"

s = '哈哈'.encode() # 这里中文要转成字节, 英文好像不用

des_obj = des(DES_KEY, ECB, DES_KEY, padmode=PAD_PKCS5) # 初始化一个des对象,参数是秘钥,加密方式,偏移, 填充方式

# secret_bytes = des_obj.encrypt(s) # 用对象的encrypt方法加密

# s = des_obj.decrypt(secret_bytes) # 用对象的decrypt方法解密

# print(secret_bytes,s)

def encrypt(s):

s = s.encode() # 这里中文要转成字节

secret_bytes = des_obj.encrypt(s) # 用对象的encrypt方法加密

return secret_bytes.hex()

def decrypt(secret_bytes):

secret_bytes = bytes.fromhex(secret_bytes) # 这里中文要转成字节

s = des_obj.decrypt(secret_bytes) # 用对象的decrypt方法解密

return s.decode()

test = encrypt("123")

print(test)

print(decrypt(test))

Java代码对比

public class RDes {

/** 加密算法,可用 DES,DESede,Blowfish. */

private final static String ALGORITHM = "DES";

/**

* DES解密算法

*

* @param cryptKey 密钥 要是偶数

* @throws Exception

*/

public static String decrypt(String data, String cryptKey) throws Exception {

return new String(decrypt(hex2byte(data.getBytes()), cryptKey.getBytes()));

}

/**

* DES加密算法

*

* @throws Exception

*/

public final static String encrypt(String data, String cryptKey) throws Exception {

return byte2hex(encrypt(data.getBytes(), cryptKey.getBytes()));

}

private static byte[] encrypt(byte[] data, byte[] key) throws Exception {

// DES算法要求有一个可信任的随机数源

SecureRandom sr = new SecureRandom();

// 从原始密匙数据创建DESKeySpec对象

DESKeySpec dks = new DESKeySpec(key);

// 创建一个密匙工厂,然后用它把DESKeySpec转换成

// 一个SecretKey对象

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);

SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher对象实际完成加密操作

Cipher cipher = Cipher.getInstance(ALGORITHM);

// 用密匙初始化Cipher对象

cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

// 现在,获取数据并加密

// 正式执行加密操作

return cipher.doFinal(data);

}

private static byte[] decrypt(byte[] data, byte[] key) throws Exception {

// DES算法要求有一个可信任的随机数源

SecureRandom sr = new SecureRandom();

// 从原始密匙数据创建一个DESKeySpec对象

DESKeySpec dks = new DESKeySpec(key);

// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成

// 一个SecretKey对象

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);

SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher对象实际完成解密操作

Cipher cipher = Cipher.getInstance(ALGORITHM);

// 用密匙初始化Cipher对象

cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

// 现在,获取数据并解密

// 正式执行解密操作

return cipher.doFinal(data);

}

private static byte[] hex2byte(byte[] b) {

if ((b.length % 2) != 0) throw new IllegalArgumentException("长度不是偶数");

byte[] b2 = new byte[b.length / 2];

for (int n = 0; n < b.length; n += 2) {

String item = new String(b, n, 2);

b2[n / 2] = (byte) Integer.parseInt(item, 16);

}

return b2;

}

private static String byte2hex(byte[] b) {

String hs = "";

String stmp = "";

for (int n = 0; n < b.length; n++) {

stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

if (stmp.length() == 1) {

hs = hs + "0" + stmp;

} else {

hs = hs + stmp;

}

}

return hs.toUpperCase();

}

}

python des加密文件_Python DES加密解密方法 pyDes库 兼容中文相关推荐

  1. python des加密文件_python DES3 加密解密

    背景:想给公司的进件流程写一套进件脚本,首先遇到的就是加密解密.公司用的 DES3 + base64 加密解密 一.安装  pycrypto模块,推荐用pycrypto编译文件,直接下载安装就行 ht ...

  2. python二进制写入文件_python读写二进制文件的方法

    本文实例讲述了python读写二进制文件的方法.分享给大家供大家参考.具体如下: 初学python,现在要读一个二进制文件,查找doc只发现 file提供了一个read和write函数,而且读写的都是 ...

  3. python读取文件某一行-使用python读取.text文件特定行的数据方法

    如何用python循环读取下面.txt文件中,用红括号标出来的数据呢? 首先,观察数据可知,不同行的第一个数据元素不一样,所以考虑直接用正则表达式. 再加上,对读和写文件的操作,就行了 注:我用的是p ...

  4. python读取文件多行内容-使用python读取.text文件特定行的数据方法

    如何用python循环读取下面.txt文件中,用红括号标出来的数据呢? 首先,观察数据可知,不同行的第一个数据元素不一样,所以考虑直接用正则表达式. 再加上,对读和写文件的操作,就行了 注:我用的是p ...

  5. python读取文件第n行-Python实现读取文件最后n行的方法

    本文实例讲述了Python实现读取文件最后n行的方法.分享给大家供大家参考,具体如下: # -*- coding:utf8-*- import os import time import dateti ...

  6. python保存代码需要删除头部信息吗_用python删除java文件头上版权信息的方法

    在使用他人代码时,为不保留文件头部版权信息,需要一个个删掉,费时费力, 写了个脚本,简单清除掉目录下所有的文件的头部版权信息.# -*- coding: utf8 -*- ''''' 删除java文件 ...

  7. python读txt文件时末尾许多空格-python读取txt文件时去掉空格的方法

    python读取txt文件时去掉空格的方法 发布时间:2020-09-22 14:15:44 来源:亿速云 阅读:85 作者:小新 这篇文章给大家分享的是有关python读取txt文件时去掉空格的方法 ...

  8. python生成exe文件运行闪退解决方法

    ** python生成exe文件运行闪退解决方法: ** 使用pyinstaller生成.exe文件: pyinstaller -F filename.py 用python写了一个程序,在python ...

  9. python的pyd文件_Python 加密之 生成pyd文件

    混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Python有py.pyc.pyw.pyo.pyd等文件格式. 其中,pyc是二进制文件.但很容易被反编译. pyw也不行,只是隐藏 ...

最新文章

  1. linux哪些文件被更新,Linux:如何確定文件是否已被其他進程更新?
  2. 实现JDK没有提供的AtomicFloat
  3. 个人图书管理系统c语言代码,c语言源代码---------------个人图书管理系统
  4. Cpp 对象模型探索 / new 对象时加括号和不加括号时的差别
  5. JDBC链接SQLServer2005 Express
  6. 【C语言】数据结构C语言版 实验4 栈与字符串
  7. Eclipse中设置自定义文档签名
  8. VS2005 + VSS2005 的方法
  9. 实对称矩阵的特征向量矩阵为酉矩阵
  10. Smail语法(1)
  11. spring retry, guava retrying 的整合-sisyphus java 重试
  12. 如何用ID批量排版图片
  13. 删除的vue怎么找回_vue详情 恢复 删除
  14. 霍夫直线检测原理详解
  15. 阿拉伯数字转换成大写的数字
  16. Android一键清理原理
  17. RuntimeError: Sizes of tensors must match except in dimension 2. Got 5 and 4
  18. 巡逻机器人(BFS)
  19. 网站网页中加入各种分享按钮功能 百度分享
  20. ubuntu/linux命令记录 长期更新

热门文章

  1. lambda表达式封装对数据库的查询
  2. Linq to SQL 语法记录....并发写事务
  3. Tips--创建jupyter notebook的虚拟环境
  4. 查找链表中倒数第k个结点(C++)
  5. 基于顺序存储结构的图书信息表的最贵图书的查找(C++)
  6. php 响应时间,PHP下解决ajax请求服务器响应时间过长问题
  7. 华为鸿蒙系统自动驾驶,华为高阶自动驾驶 + 华为鸿蒙 OS 车机系统体验
  8. 从0开始做Windows Phone 7开发
  9. spring boot定时任务解析
  10. 天使玩偶/SJY摆棋子