欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现对AES加密和解密的方法

程序员文章站 2023-12-18 08:44:34
aes简介 aes(the advanced encryption standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金...

aes简介

aes(the advanced encryption standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和*数字信息的方法。

aes 是一个新的可以用于保护电子数据的加密算法。明确地说,aes 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。以下是我经过整理的代码,希望对大家有所帮助:

复制代码 代码如下:

/// <summary>
/// ase加解密
/// </summary>
public class aeshelper
{
    /// <summary>
    /// 获取密钥
    /// </summary>
    private static string key
    {
        get
        {
            return "abcdef1234567890";    ////必须是16位
        }
    }

    //默认密钥向量
    private static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };

    /// <summary>
    /// aes加密算法
    /// </summary>
    /// <param name="plaintext">明文字符串</param>
    /// <returns>将加密后的密文转换为base64编码,以便显示</returns>
    public static string aesencrypt(string plaintext)
    {
        //分组加密算法
        symmetricalgorithm des = rijndael.create();
        byte[] inputbytearray = encoding.utf8.getbytes(plaintext);//得到需要加密的字节数组
        //设置密钥及密钥向量
        des.key = encoding.utf8.getbytes(key);
        des.iv = _key1;
        byte[] cipherbytes = null;
        using (memorystream ms = new memorystream())
        {
            using (cryptostream cs = new cryptostream(ms, des.createencryptor(), cryptostreammode.write))
            {
                cs.write(inputbytearray, 0, inputbytearray.length);
                cs.flushfinalblock();
                cipherbytes = ms.toarray();//得到加密后的字节数组
                cs.close();
                ms.close();
            }
        }
        return convert.tobase64string(cipherbytes);
    }

    /// <summary>
    /// aes解密
    /// </summary>
    /// <param name="ciphertext">密文字符串</param>
    /// <returns>返回解密后的明文字符串</returns>
    public static string aesdecrypt(string showtext)
    {
        byte[] ciphertext = convert.frombase64string(showtext);

        symmetricalgorithm des = rijndael.create();
        des.key = encoding.utf8.getbytes(key);
        des.iv = _key1;
        byte[] decryptbytes = new byte[ciphertext.length];
        using (memorystream ms = new memorystream(ciphertext))
        {
            using (cryptostream cs = new cryptostream(ms, des.createdecryptor(), cryptostreammode.read))
            {
                cs.read(decryptbytes, 0, decryptbytes.length);
                cs.close();
                ms.close();
            }
        }
        return encoding.utf8.getstring(decryptbytes).replace("\0", "");   ///将字符串后尾的'\0'去掉
    }
}


key的值可以放在config文件中,也可放入数据库中。

上一篇:

下一篇: