这两天在写GM工具,使用wxPython开发,GM工具需要与Web服务器进行简单的交互,Web服务器是用.NET写成。一些关键的数据在传输的过程中进行了加密。.NET有非常完整的加密库,使用也很方便,翻箱倒柜从以前的代码中整了一些对称加密算法出来。而Python标准模块只提供一些hash加密算法,没有提供私钥加密与共钥加密算法,但是借助于开源社区强大的威力,可以很方便的找到加密库。从网上找了一pyDes模块,它实现了DES与TripleDES算法,经过简单的测试,用.NET加密,用Python解密或者用Python加密,用.NET解密没有任何问题。写这篇文件,做个标记,以后再用到类似的应用时,直接翻出来使用,yeah~~~
.NET提供的3DES加密算法:
class TripleDES
{
public byte[] _key, _iv;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">初始化向量</param>
public TripleDES(string key, string iv)
{
if (key.Length != 16 && key.Length != 24)
throw new ArgumentException("TripleDES算法的加密密钥长度为128位或192位.");
if (iv.Length == 0 || iv.Length % 8 != 0)
throw new ArgumentException("TripleDES算法的初始化向量长度必须是64的整数倍且不能为0.");
_key = Encoding.UTF8.GetBytes(key);
_iv = Encoding.UTF8.GetBytes(iv);
}
/// <summary>
/// 加密数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public string Encrypt(string data)
{
//将数据编码为字节数组
byte[] byteData = Encoding.UTF8.GetBytes(data);
//创建加密流
MemoryStream ms = new MemoryStream();
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Mode = CipherMode.CBC;
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(_key, _iv), CryptoStreamMode.Write);
//将加密后的结果写到 流 中
cs.Write(byteData, 0, byteData.Length);
cs.FlushFinalBlock();
string result = Convert.ToBase64String(ms.ToArray());
ms.Close();
cs.Close();
return result.ToString();
}
/// <summary>
/// 解密数据
/// </summary>
/// <param name="enData"></param>
/// <returns></returns>
public string Decrypt(string enData)
{
byte[] byteData = Convert.FromBase64String(enData);
MemoryStream ms = new MemoryStream();
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Mode = CipherMode.CBC;
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(_key, _iv), CryptoStreamMode.Write);
cs.Write(byteData, 0, byteData.Length);
cs.FlushFinalBlock();
string result = Encoding.UTF8.GetString(ms.ToArray());
cs.Close();
ms.Close();
return result;
}
public static TripleDES _3DES = new TripleDES("0123456789012345", "01234567");
public static string En(string data)
{
return _3DES.Encrypt(data);
}
public static string De(string enData)
{
return _3DES.Decrypt(enData);
}
}
Python版本:
import pyDes
_3DES = pyDes.triple_des('0123456789012345', pyDes.CBC, '01234567', pad = None, padmode = pyDes.PAD_PKCS5)
def Encrypt(data):
e = _3DES.encrypt(data)
return base64.b64encode(e)
def Decrypt(enData):
d = base64.b64decode(enData)
return _3DES.decrypt(d)
分享到:
相关推荐
ESSE(加密对称会话引擎)一种开源的加密对等会话系统将允许在不通过第三方服务的情况下将...该引擎基于TDN框架以Rust语言进行编码,并且跨平台的用户界面是使用Flutter构建的。 功能分布式身份分布式网络同步和分布式
本资源提供了一个使用Java编程语言实现的RSA文件加密软件。该软件采用RSA非对称加密算法,对用户指定的文件进行加密和解密操作,确保文件数据的安全性和保密性。 主要特点: 1. **安全性高**:采用业界认可的RSA非...
Qt本身并不是一种编程语言,它本质上是一个跨平台的C++开发类库,是用标准C++编写的类库,它为开发GUI应用程序和非GUI应用程序提供了各种类。 Qt对标准C++进行了扩展,引入了一些新概念和功能,例如信号和槽、对象...
一般情况下除非对RSA算法研究特别深,否则在涉及多系统集成,跨语言跨系统通信时,涉及非对称加密诸如RSA时,密钥生成,对加解密十分重要..
采用RSA非对称加密算法,使用公钥加密私钥解密。 【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高...
OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得...
OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得...
6.3.2 跨页回发 6.4 cookie 6.5 会话状态 6.5.1 会话架构 6.5.2 使用会话状态 6.5.3 配置会话状态 6.5.4 会话状态安全 6.6 应用程序状态 6.7 总结 第二部分 数据访问 第7章 基础 7.1 ADO.NET...
7.4.5 创建文本框 7.4.6 检验用户输入 7.4.7 显示图像 7.4.8 进行电话呼叫 7.4.9 用可移动控件显示广告 7.4.10 使用可移动控件显示日历 7.5 创建跨设备兼容的可移动页面 ...
6.3.2 跨页回发 188 6.4 cookie 193 6.5 会话状态 194 6.5.1 会话架构 194 6.5.2 使用会话状态 196 6.5.3 配置会话状态 197 6.5.4 会话状态安全 202 6.6 应用程序状态 203 6.7 总结 206 第二部分...
21.2.2 申请服务器证书 21.2.3 安装服务器证书 21.3 在ASP.NET页面中使用SSL 21.4 使用.NET加密类 21.4.1 使用散列算法 21.4.2 使用对称加密算法 21.4.3 使用不对称加密 21.5 小结 ...
21.2.2 申请服务器证书 21.2.3 安装服务器证书 21.3 在ASP.NET页面中使用SSL 21.4 使用.NET加密类 21.4.1 使用散列算法 21.4.2 使用对称加密算法 21.4.3 使用不对称加密 21.5 小结 ...
21.2.2 申请服务器证书 21.2.3 安装服务器证书 21.3 在ASP.NET页面中使用SSL 21.4 使用.NET加密类 21.4.1 使用散列算法 21.4.2 使用对称加密算法 21.4.3 使用不对称加密 21.5 小结 ...
21.2.2 申请服务器证书 21.2.3 安装服务器证书 21.3 在ASP.NET页面中使用SSL 21.4 使用.NET加密类 21.4.1 使用散列算法 21.4.2 使用对称加密算法 21.4.3 使用不对称加密 21.5 小结 ...
21.2.2 申请服务器证书 21.2.3 安装服务器证书 21.3 在ASP.NET页面中使用SSL 21.4 使用.NET加密类 21.4.1 使用散列算法 21.4.2 使用对称加密算法 21.4.3 使用不对称加密 21.5 小结 ...
openssl是一个功能丰富且自包含的开源安全工具箱。... openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、 UNIX、windows、Mac等平台。openssl 目前最新的版本是0.9.8e.
针对文本,文件和聊天的高安全性非对称加密。 您保留密钥秘密并给出匹配的锁 亲自掌控端到端的安全加密,以及电子邮件和实时聊天的隐写技术。 PassLok不使用可能危害您信息的服务器。 一切都离线完成。 PassLok不会...
Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang...
Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang...