C#简单的加密类实例_C#教程

复制代码 代码如下:

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
     }

时间: 2024-11-03 10:12:49

C#简单的加密类实例_C#教程的相关文章

php实现RSA加密类实例

 这篇文章主要介绍了php实现RSA加密类,实例分析了php自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php实现RSA加密类.分享给大家供大家参考.具体分析如下: 通过openssl实现的签名.验签.非对称加解密,需要配合x.509证书(如crt和pem)文件使用. 由于各种原因,该类并不十分完善,欢迎各种测试! ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

自己简单封装的一个CDialog类实例_C 语言

本文实例讲述了自己简单封装的一个CDialog类实例.分享给大家供大家参考.具体如下: 该代码比较短小,实现了消息映射. Dialog.h头文件如下: #include <windows.h> class CDialog { public: //一条消息所包含的信息 struct MAP { UINT Msg; bool (*pf)(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); int len; MAP *pNext; }; publ

PHP简单数据库操作类实例【支持增删改查及链式操作】_php技巧

本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类(模型Model),供大家使用.支持增.删.改.查,支持链式操作,代码不到100行,非常小巧方便,很适合小项目的快速部署使用. /** * * @Authot: summer * * @E-mail: wenghang1228@me.com * * @Data: 2015-02-06 * * @Pr

CI框架简单邮件发送类实例_php实例

本文实例讲述了CI框架简单邮件发送类.分享给大家供大家参考,具体如下: ci框架绝对是php初学中想要的东西,它能极大的缩短你的代码量! 下面看看我的发送邮件的简单演示: function email() { $this->load->library('email'); $config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.163.com'; $config['smtp_user'] = 'jb51@163.com';//这里写上

CI框架简单邮件发送类实例

本文实例讲述了CI框架简单邮件发送类.分享给大家供大家参考,具体如下: ci框架绝对是php初学中想要的东西,它能极大的缩短你的代码量! 下面看看我的发送邮件的简单演示: function email() { $this->load->library('email'); $config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.163.com'; $config['smtp_user'] = 'jb51@163.com';//这里写上

php实现RSA加密类实例_php技巧

本文实例讲述了php实现RSA加密类.分享给大家供大家参考.具体分析如下: 通过openssl实现的签名.验签.非对称加解密,需要配合x.509证书(如crt和pem)文件使用. 由于各种原因,该类并不十分完善,欢迎各种测试! <?php /** * RSA算法类 * 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流 * 填充方式: PKCS1Padding(加解密)/NOPadding(解密) * * Notice:Only accepts a single block. B

java实现简单的计算器类实例_java

本文实例讲述了java实现简单的计算器类.分享给大家供大家参考.具体如下: package chap; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text

C#使用UdpClient类进行简单通信的实例_C#教程

UdpClient 类提供了一些简单的方法,用于在阻止同步模式下发送和接收无连接 UDP 数据报. 因为 UDP 是无连接传输协议,所以不需要在发送和接收数据前建立远程主机连接.但您可以选择使用下面两种方法之一来建立默认远程主机: 使用远程主机名和端口号作为参数创建 UdpClient 类的实例. 创建 UdpClient 类的实例,然后调用 Connect 方法. 可以使用在 UdpClient 中提供的任何一种发送方法将数据发送到远程设备. 使用 Receive 方法可以从远程主机接收数据.

C#实现可捕获几乎所有键盘鼠标事件的钩子类完整实例_C#教程

本文实例讲述了C#实现可捕获几乎所有键盘鼠标事件的钩子类.分享给大家供大家参考,具体如下: using System; using System.Text; using System.Runtime.InteropServices; using System.Reflection; using System.Windows.Forms; namespace MouseKeyboardLibrary { /// <summary> /// Abstract base class for Mous