代码笔记 | 用C#实现跟CI里面的加密解密
来源:互联网 发布:天庭淘宝店txt下载无常 编辑:程序博客网 时间:2024/06/16 17:49
using System;using System.Text;using System.IO;using System.Security.Cryptography; namespace CI{ class CI_Encrypt { private string key; private string hash_type = "sha1"; public CI_Encrypt(string key = "") { if(key.Length > 0) { this.key = key; } } public string encode(string data) { RijndaelManaged aes = new RijndaelManaged(); aes.KeySize = 256; aes.BlockSize = 256; aes.Padding = PaddingMode.Zeros; aes.Mode = CipherMode.CBC; aes.Key = this.get_key(key); aes.GenerateIV(); var _IV = aes.IV; byte[] buffer; ICryptoTransform AESEncrypt = aes.CreateEncryptor(aes.Key, aes.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, AESEncrypt, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { //Write all data to the stream. swEncrypt.Write(data); } buffer = msEncrypt.ToArray(); } } var enc = new byte [ _IV.Length + buffer.Length ]; Array.Copy(_IV,enc ,_IV.Length); Array.Copy(buffer,0,enc,_IV.Length,buffer.Length); return this.add_cipher_noise(enc); } public string decode(string data) { string plainText; byte[] _enc_data = this.remove_cipher_noise(Convert.FromBase64String(data)); using (RijndaelManaged aes = new RijndaelManaged()) { aes.KeySize = 256; aes.BlockSize = 256; aes.Padding = PaddingMode.Zeros; aes.Mode = CipherMode.CBC; aes.Key = this.get_key(key); var _IV = new byte[aes.IV.Length]; Array.Copy(_enc_data, _IV, _IV.Length); aes.IV = _IV; var endata = new byte[_enc_data.Length - aes.IV.Length]; Array.Copy(_enc_data, aes.IV.Length, endata, 0, endata.Length); // Create a decrytor to perform the stream transform. ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV); // Create the streams used for decryption. using (MemoryStream msDecrypt = new MemoryStream(endata)) { 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(); } } } } return plainText; } public string add_cipher_noise(byte[] data) { string hashkey = this.hash(System.Text.Encoding.Default.GetString(this.get_key(this.key))); char[] keyChar = hashkey.ToCharArray(); byte[] encrpytData = new byte[data.Length]; for (int i = 0, j = 0; i < data.Length; i++, j++) { if (j >= hashkey.Length) { j = 0; } var temp = (((int)data[i] + (int)keyChar[j]) % 256); encrpytData[i] = (byte)temp; } return System.Convert.ToBase64String(encrpytData); } public byte[] remove_cipher_noise(byte[] data) { string hashkey = this.hash(System.Text.Encoding.Default.GetString(this.get_key(this.key))); char[] keyChar = hashkey.ToCharArray(); byte[] encrpytData = new byte[data.Length]; int temp; for (int i = 0, j = 0; i < data.Length; i++, j++) { if (j >= hashkey.Length) { j = 0; } temp = (int)data[i] - (int)keyChar[j]; if(temp < 0) { temp += 256; } encrpytData[i] = (byte)temp; } return encrpytData; } private string hash(string key) { byte[] hashBytes; if (this.hash_type == "sha1") { SHA1 sha = new SHA1CryptoServiceProvider(); hashBytes = (sha.ComputeHash(System.Text.Encoding.Default.GetBytes(key))); } else { MD5 md5 = new MD5CryptoServiceProvider(); hashBytes = (md5.ComputeHash(System.Text.Encoding.Default.GetBytes(key))); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("X2")); } return sb.ToString().ToLower(); } private byte[] get_key(string key) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] hashBytes = (md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key))); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("X2")); } return System.Text.Encoding.Default.GetBytes(sb.ToString().ToLower()); } }}
0 0
- 代码笔记 | 用C#实现跟CI里面的加密解密
- c# 图片加密解密的实例代码
- MD5的加密跟解密
- CI内的加密解密用法
- php 实现php代码的加密解密
- 简单的一行代码实现加密解密
- 不对称加密和解密,用C#实现
- 用C#实现DES加密解密封装
- 用C#实现DES加密解密
- 用C#实现DES加密解密
- C#用DES加密JAVA用DES解密,JAVA用DES加密C#用DES解密的实现
- C#编程实现加密解密文件夹核心代码
- c#实现RSA加密解密
- C#实现AES加密解密
- C#实现RSA加密解密
- C#实现Base64加密解密
- AES加密解密代码实现
- 一个C#封装的加密解密类代码
- 关于BeanUtils.copyProperties的用法和优缺点
- centos7搭建http服务器__指向外部地址
- PCI IO操作
- 64位系统下的ODBC配置注意事项
- vijos P1495笨小猴
- 代码笔记 | 用C#实现跟CI里面的加密解密
- Spring-Bean初始化顺序
- 最大子序列和问题
- SQL Server SQL性能优化之参数化
- cisco 2600路由器忘记密码
- jstack查找多线程开发的问题
- Levenberg-Marquardt Algorithm
- Java基础知识回顾--线程
- 4