`
qepwqnp
  • 浏览: 108860 次
  • 性别: 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)
分享到:
评论

相关推荐

    Java-Js双向Des对称加密Demo

    在IT领域,数据安全至关重要,而对称加密技术如DES...通过学习和实践这个示例,你可以掌握如何在多平台间实现对称加密的互操作性,这对于开发跨平台应用或需要在服务器端和客户端之间安全传输数据的场景非常有用。

    C#和Java关于RSA非对称加密互通类

    RSA(Rivest-Shamir-Adleman)算法是其中最为广泛使用的非对称加密算法之一。本篇将深入探讨C#和Java之间如何实现RSA非对称加密的互通,并详细讲解涉及的类和方法。 首先,RSA的核心概念是基于两个不同的密钥:公钥...

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

    非对称加密用于交换对称密钥,然后使用对称密钥进行大量数据的加密,因为对称加密在速度上通常优于非对称加密。 总结来说,这个毕设项目展示了如何结合C++编程语言和Qt框架,利用RSA非对称加密技术,实现一个安全的...

    Qt中可用的AES加密程序.zip

    在IT领域,加密技术是确保数据安全的重要手段之一,而AES(Advanced Encryption Standard)作为一项广泛应用的对称加密算法,其高效性和安全性被广大开发者所信赖。本项目以Qt为开发环境,提供了一个AES加密程序的...

    Qt实现AES加密和解密

    然而,Qt库本身并不直接包含对称加密算法,如AES(高级加密标准)。因此,开发者需要通过其他方式来实现这些功能。本文将详细介绍如何在Qt环境中实现AES加密和解密。 AES是一种广泛使用的对称加密算法,它基于块...

    通用AES加密版本

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它为数据提供了强大的安全保护,确保信息在传输或存储时不被未经授权的用户访问。AES在各种编程语言中都有实现,包括Objective-C、C#、Java和...

    使用通用最佳实践的跨平台字符串加密。.zip

    3. **RSA非对称加密**:RSA是一种非对称加密算法,使用一对公钥和私钥。公钥用于加密,私钥用于解密。在跨平台场景中,这可以用于安全地交换密钥或者签名数据,保证数据传输的安全性。 4. **密钥管理**:如何安全地...

    asp.net RSA 私钥加密公钥解密 能解 php Java 实现RSA加密互通

    在IT行业中,加密技术是确保数据安全的重要手段之一,RSA(Rivest-Shamir-Adleman)算法就是一种广泛使用的非对称加密算法。本文将深入探讨如何在ASP.NET环境中实现RSA加密,并且与PHP和Java进行互通,以及涉及的...

    C#常用加密及解密。

    使用这个类,你可以方便地进行公钥加密和私钥解密,这对于与Java等其他语言的互操作性至关重要,因为RSA算法是跨语言支持的。 接下来是`TripleDESCry`,这指的是Triple DES(三重数据加密标准),一种对称加密算法...

    Asherah是一款多语言、跨平台的应用加密SDK.zip

    对称加密用于快速处理大量数据,而非对称加密则用于保护密钥的安全,确保只有授权的实体才能解密数据。此外,它还支持密钥的生命周期管理,包括密钥的生成、存储、分发、更新和销毁,确保了密钥在整个使用过程中的...

    qt中可用c++的AES加密代码

    AES是一种广泛使用的对称加密算法,以其高效和安全性著称,适用于大量数据的加密。在C++中实现AES加密,尤其在Qt环境下,不需要额外引入外部库,这使得项目依赖更少,代码更简洁。 AES加密的基本流程包括以下几个...

    分组加密算法

    分组加密算法是对称加密算法的一种,使用相同的密钥来实现加密和解密。以 DES 加密算法为例,掌握分组加密算法加密、解密的过程实现。 一、加密过程 1. 初始化密钥:使用 KeyGenerator 类创建对称密钥,指定算法...

    C++/java/C#语言的AES加密解密

    AES是一种广泛使用的对称加密算法,它在信息安全领域中扮演着重要的角色,用于保护数据的隐私和安全。 在描述中,提到了“纯C++代码开发,没调用API库”,这意味着这个实现是完全自包含的,没有依赖外部的加密库,...

    Unicode加密与解密 中文的转译

    Unicode是全球字符编码标准,它旨在...了解并掌握这些技术可以帮助开发者更好地处理中文字符,保障数据安全,同时支持跨语言的信息交流。对于从事Web开发、信息安全或相关领域的专业人员来说,这些都是必不可少的技能。

    C#390-口令加密Exe源代码

    非对称加密如RSA,使用一对公钥和私钥,公钥可公开,私钥需保密。 2. **哈希加密**:哈希函数是不可逆的,可以快速验证口令输入是否正确,但不能用于长期存储,因为碰撞攻击可能导致安全风险。在C#中,`System....

    RSA使用js加密,使用java解密

    为了实现跨语言的加密解密,确保两端使用的密钥格式一致至关重要。例如,JavaScript中通常使用Base64编码的密钥字符串,而在Java中,可能需要解析这些字符串并转换为相应的密钥对象。因此,了解密钥的导入和导出格式...

Global site tag (gtag.js) - Google Analytics