跨语言使用对称加密

    这两天在写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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值