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

C#简单的加密类实例

程序员文章站 2023-12-01 13:41:04
复制代码 代码如下:public static class encryptanddecrypt     {  &...
复制代码 代码如下:

public static class encryptanddecrypt
     {
         //加密
         public static string encrypt(string input)
         {
             // 盐值
             string saltvalue = "saltvalue";
             // 密码值
             string pwdvalue = "pwdvalue";
             byte[] data = system.text.utf8encoding.utf8.getbytes(input);
             byte[] salt = system.text.utf8encoding.utf8.getbytes(saltvalue);
             // aesmanaged - 高级加密标准(aes) 对称算法的管理类
             system.security.cryptography.aesmanaged aes = new system.security.cryptography.aesmanaged();
             // rfc2898derivebytes - 通过使用基于 hmacsha1 的伪随机数生成器,实现基于密码的密钥派生功能 (pbkdf2 - 一种基于密码的密钥派生函数)
             // 通过 密码 和 salt 派生密钥
             system.security.cryptography.rfc2898derivebytes rfc = new system.security.cryptography.rfc2898derivebytes(pwdvalue, salt);
             /**/
             /*
          * aesmanaged.blocksize - 加密操作的块大小(单位:bit)
          * aesmanaged.legalblocksizes - 对称算法支持的块大小(单位:bit)
          * aesmanaged.keysize - 对称算法的密钥大小(单位:bit)
          * aesmanaged.legalkeysizes - 对称算法支持的密钥大小(单位:bit)
          * aesmanaged.key - 对称算法的密钥
          * aesmanaged.iv - 对称算法的密钥大小
          * rfc2898derivebytes.getbytes(int 需要生成的伪随机密钥字节数) - 生成密钥
          */
             aes.blocksize = aes.legalblocksizes[0].maxsize;
             aes.keysize = aes.legalkeysizes[0].maxsize;
             aes.key = rfc.getbytes(aes.keysize / 8);
             aes.iv = rfc.getbytes(aes.blocksize / 8);
             // 用当前的 key 属性和初始化向量 iv 创建对称加密器对象
             system.security.cryptography.icryptotransform encrypttransform = aes.createencryptor();
             // 加密后的输出流
             system.io.memorystream encryptstream = new system.io.memorystream();
             // 将加密后的目标流(encryptstream)与加密转换(encrypttransform)相连接
             system.security.cryptography.cryptostream encryptor = new system.security.cryptography.cryptostream
                 (encryptstream, encrypttransform, system.security.cryptography.cryptostreammode.write);
             // 将一个字节序列写入当前 cryptostream (完成加密的过程)
             encryptor.write(data, 0, data.length);
             encryptor.close();
             // 将加密后所得到的流转换成字节数组,再用base64编码将其转换为字符串
             string encryptedstring = convert.tobase64string(encryptstream.toarray());
             return encryptedstring;
         }

 
         #region silverlight密码解密
         /**/
         /// <summary>
         /// 解密数据
         /// </summary>
         /// <param name="input">加密后的字符串</param>
         /// <returns>加密前的字符串</returns>
         public static string decrypt(string input)
         {
             // 盐值(与加密时设置的值一致)
             string saltvalue = "saltvalue";
             // 密码值(与加密时设置的值一致)
             string pwdvalue = "pwdvalue";
             byte[] encryptbytes = convert.frombase64string(input);
             byte[] salt = encoding.utf8.getbytes(saltvalue);
             system.security.cryptography.aesmanaged aes = new system.security.cryptography.aesmanaged();
             system.security.cryptography.rfc2898derivebytes rfc = new system.security.cryptography.rfc2898derivebytes(pwdvalue, salt);
             aes.blocksize = aes.legalblocksizes[0].maxsize;
             aes.keysize = aes.legalkeysizes[0].maxsize;
             aes.key = rfc.getbytes(aes.keysize / 8);
             aes.iv = rfc.getbytes(aes.blocksize / 8);
             // 用当前的 key 属性和初始化向量 iv 创建对称解密器对象
             system.security.cryptography.icryptotransform decrypttransform = aes.createdecryptor();
             // 解密后的输出流
             memorystream decryptstream = new memorystream();
             // 将解密后的目标流(decryptstream)与解密转换(decrypttransform)相连接
             system.security.cryptography.cryptostream decryptor = new system.security.cryptography.cryptostream(
                 decryptstream, decrypttransform, system.security.cryptography.cryptostreammode.write);
             // 将一个字节序列写入当前 cryptostream (完成解密的过程)
             decryptor.write(encryptbytes, 0, encryptbytes.length);
             decryptor.close();
             // 将解密后所得到的流转换为字符串
             byte[] decryptbytes = decryptstream.toarray();
             string decryptedstring = utf8encoding.utf8.getstring(decryptbytes, 0, decryptbytes.length);
             return decryptedstring;
         }
         #endregion
     }