`
qepwqnp
  • 浏览: 106380 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

跨语言使用对称加密

阅读更多

这两天在写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(加密对称会话引擎)一种开源的加密对等会话系统-Flutter开发

    ESSE(加密对称会话引擎)一种开源的加密对等会话系统将允许在不通过第三方服务的情况下将...该引擎基于TDN框架以Rust语言进行编码,并且跨平台的用户界面是使用Flutter构建的。 功能分布式身份分布式网络同步和分布式

    Java毕业设计-基于JAVA的RSA文件加密软件的设计与实现(源代码+论文).rar

    本资源提供了一个使用Java编程语言实现的RSA文件加密软件。该软件采用RSA非对称加密算法,对用户指定的文件进行加密和解密操作,确保文件数据的安全性和保密性。 主要特点: 1. **安全性高**:采用业界认可的RSA非...

    毕设项目:基于C++&QT实现的RAS 非对称加密的信息传输系统.zip

    Qt本身并不是一种编程语言,它本质上是一个跨平台的C++开发类库,是用标准C++编写的类库,它为开发GUI应用程序和非GUI应用程序提供了各种类。 Qt对标准C++进行了扩展,引入了一些新概念和功能,例如信号和槽、对象...

    Win64OpenSSL-1_1_0f_用于生成RSA的公钥私钥对,并可加解密处理

    一般情况下除非对RSA算法研究特别深,否则在涉及多系统集成,跨语言跨系统通信时,涉及非对称加密诸如RSA时,密钥生成,对加解密十分重要..

    基于Python3.8.2+PyQt5 5.14开发的跨平台(MacOS、Windows、Linux)的简单文件加解密工具

    采用RSA非对称加密算法,使用公钥加密私钥解密。 【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高...

    openssl-1.0.0a

    OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得...

    OpenSSL-1_0_0d_Win32

    OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    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...

    ASP.net技术内幕

    7.4.5 创建文本框 7.4.6 检验用户输入 7.4.7 显示图像 7.4.8 进行电话呼叫 7.4.9 用可移动控件显示广告 7.4.10 使用可移动控件显示日历 7.5 创建跨设备兼容的可移动页面 ...

    ASP.NET4高级程序设计(第4版) 3/3

    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 第二部分...

    asp.net技术内幕(1)

    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 小结 ...

    asp.net技术内幕(2)

    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 小结 ...

    asp.net技术内幕(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 小结 ...

    asp.net技术内幕(4)

    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 小结 ...

    asp.net技术内幕(3)

    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编程.rar

    openssl是一个功能丰富且自包含的开源安全工具箱。... openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、 UNIX、windows、Mac等平台。openssl 目前最新的版本是0.9.8e.

    PassLok Privacy-crx插件

    针对文本,文件和聊天的高安全性非对称加密。 您保留密钥秘密并给出匹配的锁 亲自掌控端到端的安全加密,以及电子邮件和实时聊天的隐写技术。 PassLok不使用可能危害您信息的服务器。 一切都离线完成。 PassLok不会...

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

Global site tag (gtag.js) - Google Analytics