C#/.NET字符串加密和解密实现(AES和RSA代码举例)
2014-08-12 00:00
344 查看
在很多C#项目中,都需要实现对字符串的加密和解密,那么如何实现呢?现在对称密钥加密中最流行的就是AES加密法。
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
在这里可以提供一个基于AES加密和解密的实现代码:
另外再提供一段基于RSA的加密算法,RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
C#中实现RSA加密代码如下:
转载请注明:文章转载自:[169IT-最新最全的IT资讯]
本文标题:C#/.NET字符串加密和解密实现(AES和RSA代码举例)
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
在这里可以提供一个基于AES加密和解密的实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | public class Crypto { private static byte [] _salt = Encoding.ASCII.GetBytes( "o6806642kbM7c5" ); /// <summary> /// Encrypt the given string using AES. The string can be decrypted using /// DecryptStringAES(). The sharedSecret parameters must match. /// </summary> /// <param name="plainText">The text to encrypt.</param> /// <param name="sharedSecret">A password used to generate a key for encryption.</param> public static string EncryptStringAES( string plainText, string sharedSecret) { if ( string .IsNullOrEmpty(plainText)) throw new ArgumentNullException( "plainText" ); if ( string .IsNullOrEmpty(sharedSecret)) throw new ArgumentNullException( "sharedSecret" ); string outStr = null ; // Encrypted string to return RijndaelManaged aesAlg = null ; // RijndaelManaged object used to encrypt the data. try { // generate the key from the shared secret and the salt Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); // Create a RijndaelManaged object aesAlg = new RijndaelManaged(); aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); // Create a decryptor to perform the stream transform. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // Create the streams used for encryption. using (MemoryStream msEncrypt = new MemoryStream()) { // prepend the IV msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length),0, sizeof ( int )); msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length); using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { //Write all data to the stream. swEncrypt.Write(plainText); } } outStr =Convert.ToBase64String(msEncrypt.ToArray()); } } finally { // Clear the RijndaelManaged object. if (aesAlg != null ) aesAlg.Clear(); } // Return the encrypted bytes from the memory stream. return outStr; } /// <summary> /// Decrypt the given string. Assumes the string was encrypted using /// EncryptStringAES(),using an identical sharedSecret. /// </summary> /// <param name="cipherText">The text to decrypt.</param> /// <param name="sharedSecret">A password used to generate a key for decryption.</param> public static string DecryptStringAES( string cipherText, string sharedSecret) { if ( string .IsNullOrEmpty(cipherText)) throw new ArgumentNullException( "cipherText" ); if ( string .IsNullOrEmpty(sharedSecret)) throw new ArgumentNullException( "sharedSecret" ); // Declare the RijndaelManaged object // used to decrypt the data. RijndaelManaged aesAlg = null ; // Declare the string used to hold // the decrypted text. string plaintext = null ; try { // generate the key from the shared secret and the salt Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt); // Create the streams used for decryption. byte [] bytes = Convert.FromBase64String(cipherText); using (MemoryStream msDecrypt = new MemoryStream(bytes)) { // Create a RijndaelManaged object // with the specified key and IV. aesAlg = new RijndaelManaged(); aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); // Get the initialization vector from the encrypted stream aesAlg.IV = ReadByteArray(msDecrypt); // Create a decrytor to perform the stream transform. ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) // Read the decrypted bytes from the decrypting stream // and place them in a string. plaintext =srDecrypt.ReadToEnd(); } } } finally { // Clear the RijndaelManaged object. if (aesAlg != null ) aesAlg.Clear(); } return plaintext; } private static byte [] ReadByteArray(Stream s) { byte [] rawLength = new byte [ sizeof ( int )]; if (s.Read(rawLength, 0, rawLength.Length) != rawLength.Length) { throw new SystemException( "Stream did not contain properly formatted byte array" ); } byte [] buffer = new byte [BitConverter.ToInt32(rawLength, 0)]; if (s.Read(buffer, 0, buffer.Length) != buffer.Length) { throw new SystemException( "Did not read byte array properly" ); } return buffer; } } |
C#中实现RSA加密代码如下:
1 2 3 4 5 6 | var provider = new System.Security.Cryptography.RSACryptoServiceProvider(); provider.ImportParameters(your_rsa_key); var encryptedBytes = provider.Encrypt( System.Text.Encoding.UTF8.GetBytes( "Hello World!" ), true ); string decryptedTest = System.Text.Encoding.UTF8.GetString( provider.Decrypt(encryptedBytes, true )); |
本文标题:C#/.NET字符串加密和解密实现(AES和RSA代码举例)
相关文章推荐
- C#实现AES加密和解密函数原代码
- C#代码实现对AES加密解密
- C#实现RSA加密解密
- 基于RSA的加密/解密示例C#代码
- C#实现AES加密和解密
- 用C#实现AES加密和解密
- .NET中RAS加解密和签名与验证的c#实现代码讲解,及实现程序提供——转自《起跑线的专栏》
- C#实现256位AES加密和解密
- C#实现RSA加解密,验证同Cryptopp561的一致性成功
- C#中RSA加密解密和签名与验证的实现
- c#实现RSA加密解密 - - 博客频道 - zyloveyrf jinghuazhi.com
- 转载:C#中RSA加密解密和签名与验证的实现
- C#中RSA加密解密和签名与验证的实现
- OpenSSL 实现RSA AES加解密
- C#中RSA加密解密和签名与验证的实现
- c#实现RSA加密解密
- C#中RSA加密解密和签名与验证的实现
- C#实现AES加解密,验证同Cryptopp561的一致性成功
- C#中RSA加密解密和签名与验证的实现 (转)
- C#中RSA加密解密和签名与验证的实现