问题描述
- 关于DES加密 求帮助!
-
对接方des加密 是用.net 写的我用的是php 就大侠把.net的加密程序帮我 转换成 php的
下面是 .NET 的加密程序:
public class DESEncryptDecrypt { private string Key; private string IV; private DESCryptoServiceProvider IDes; private byte[] GetKey; private byte[] GetIV; public DESEncryptDecrypt() { this.Key = "%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7&*^$^&*%&*%$@#@^"; this.IV = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; this.Init(); } public DESEncryptDecrypt(string Key) { this.Key = Key; this.IV = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; this.Init(); } public DESEncryptDecrypt(string Key,string IV) { this.Key = Key; this.IV = IV; this.Init(); } private void Init() { this.IDes = new DESCryptoServiceProvider(); this.IDes.GenerateKey(); this.GetKey = this.IDes.Key; this.IDes.GenerateIV(); this.GetIV = this.IDes.IV; } /// <summary> /// 获得密钥 /// </summary> /// <returns>密钥</returns> private byte[] GetLegalKey() { string sTemp = this.Key; byte[] bytTemp = this.GetKey; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) { sTemp = sTemp.Substring(0, KeyLength); } else { if (sTemp.Length < KeyLength) { sTemp = sTemp.PadRight(KeyLength, ' '); } } return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary> /// 获得初始向量IV /// </summary> /// <returns>初试向量IV</returns> private byte[] GetLegalIV() { string sTemp = this.Key; byte[] bytTemp = this.GetIV; int IVLength = bytTemp.Length; if (sTemp.Length > IVLength) { sTemp = sTemp.Substring(0, IVLength); } else { if (sTemp.Length < IVLength) { sTemp = sTemp.PadRight(IVLength, ' '); } } return ASCIIEncoding.ASCII.GetBytes(sTemp); } /// <summary> /// 加密算法 /// </summary> /// <param name="data"></param> /// <returns></returns> public string Encrypt(string data) { //将要加密的数据编码为字节数组 byte[] encrypt_data = System.Text.Encoding.UTF8.GetBytes(data); //如果使用Unicode编码,支持中文加密 //创建流,保存加密后的数据 MemoryStream ms = new MemoryStream(); //创建加密流 CryptoStream cs = new CryptoStream(ms, this.IDes.CreateEncryptor(this.GetLegalKey(), this.GetLegalIV()), CryptoStreamMode.Write); //调用Write方法将加密后的结果写到 流 中 cs.Write(encrypt_data, 0, encrypt_data.Length); //将数据从流写入内存(这句不能少,否则在从内存导出到字符串的时候会出现字符丢失) cs.FlushFinalBlock(); //ms.ToString(); ==>将流写入字节数组中 string result = Convert.ToBase64String(ms.ToArray()); ms.Close(); cs.Close(); return result; } /// <summary> /// 解密算法 /// </summary> /// <param name="data"></param> /// <returns></returns> public string Decrypt(string data) { byte[] decrypt_data = Convert.FromBase64String(data); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, this.IDes.CreateDecryptor(this.GetLegalKey(), this.GetLegalIV()), CryptoStreamMode.Write); cs.Write(decrypt_data, 0, decrypt_data.Length); cs.FlushFinalBlock(); string result = System.Text.Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); cs.Close(); return result; } }
解决方案
http://php.net/manual/en/function.mcrypt-encrypt.php
解决方案二:
http://www.cnblogs.com/cocowool/archive/2009/01/07/1371309.html
时间: 2024-10-03 04:46:40