对接方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;
}
}