能否将下面的C#的加密解密方法转换成java的加密解密方法 /// <summary>
/// 加密字符串 静态方法
/// </summary>
/// <param name="inputStr">输入明文字符串</param>
/// <param name="keyStr">密钥,可以为""</param>
/// <returns>输出加密后字符串</returns>
//************************************************************************
public static string EncryptString(string inputStr, string keyStr)
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); if (keyStr == "") keyStr = key; //此密钥默认为:1234567890 byte[] inputByteArray = Encoding.Default.GetBytes(inputStr);//此与解密不同点1
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr); SHA1 ha = new SHA1Managed();
byte[] hb = ha.ComputeHash(keyByteArray); skey = new byte[8];
siv = new byte[8]; for (int i = 0; i < 8; i++) skey[i] = hb[i];
for (int i = 8; i < 16; i++) siv[i - 8] = hb[i]; des.Key = skey; // 取得机密密钥
des.IV = siv; // 取得初始化向量(作用-相当于随机'盐'值)
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//此与解密不同点2 cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:x2}", b);
} cs.Close();
ms.Close(); return ret.ToString();
}
catch (Exception ex)
{
throw ex;
}
} //************************************************************************
/// <summary>
/// 解密字符串 静态方法
/// </summary>
/// <param name="inputStr">要解密的字符串</param>
/// <param name="keyStr">密钥,可以为""</param>
/// <returns>解密后的结果</returns>
//************************************************************************
public static string DecryptString(string inputStr, string keyStr)
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); if (keyStr == "") keyStr = key;//此密钥默认为:1234567890 byte[] inputByteArray = new byte[inputStr.Length / 2];//此与加密不同点1 for (int x = 0; x < inputStr.Length / 2; x++) //此与加密不同点1
{
int i = (Convert.ToInt32(inputStr.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
} byte[] keyByteArray = Encoding.Default.GetBytes(keyStr); SHA1 ha = new SHA1Managed(); byte[] hb = ha.ComputeHash(keyByteArray); skey = new byte[8];
siv = new byte[8]; for (int i = 0; i < 8; i++) skey[i] = hb[i];
for (int i = 8; i < 16; i++) siv[i - 8] = hb[i]; des.Key = skey; // 取得机密密钥
des.IV = siv; // 取得初始化向量(作用-相当于随机'盐'值)
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);//此与加密不同点2
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
catch (Exception ex)
{
throw ex;
}
}
/// 加密字符串 静态方法
/// </summary>
/// <param name="inputStr">输入明文字符串</param>
/// <param name="keyStr">密钥,可以为""</param>
/// <returns>输出加密后字符串</returns>
//************************************************************************
public static string EncryptString(string inputStr, string keyStr)
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); if (keyStr == "") keyStr = key; //此密钥默认为:1234567890 byte[] inputByteArray = Encoding.Default.GetBytes(inputStr);//此与解密不同点1
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr); SHA1 ha = new SHA1Managed();
byte[] hb = ha.ComputeHash(keyByteArray); skey = new byte[8];
siv = new byte[8]; for (int i = 0; i < 8; i++) skey[i] = hb[i];
for (int i = 8; i < 16; i++) siv[i - 8] = hb[i]; des.Key = skey; // 取得机密密钥
des.IV = siv; // 取得初始化向量(作用-相当于随机'盐'值)
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//此与解密不同点2 cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:x2}", b);
} cs.Close();
ms.Close(); return ret.ToString();
}
catch (Exception ex)
{
throw ex;
}
} //************************************************************************
/// <summary>
/// 解密字符串 静态方法
/// </summary>
/// <param name="inputStr">要解密的字符串</param>
/// <param name="keyStr">密钥,可以为""</param>
/// <returns>解密后的结果</returns>
//************************************************************************
public static string DecryptString(string inputStr, string keyStr)
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); if (keyStr == "") keyStr = key;//此密钥默认为:1234567890 byte[] inputByteArray = new byte[inputStr.Length / 2];//此与加密不同点1 for (int x = 0; x < inputStr.Length / 2; x++) //此与加密不同点1
{
int i = (Convert.ToInt32(inputStr.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
} byte[] keyByteArray = Encoding.Default.GetBytes(keyStr); SHA1 ha = new SHA1Managed(); byte[] hb = ha.ComputeHash(keyByteArray); skey = new byte[8];
siv = new byte[8]; for (int i = 0; i < 8; i++) skey[i] = hb[i];
for (int i = 8; i < 16; i++) siv[i - 8] = hb[i]; des.Key = skey; // 取得机密密钥
des.IV = siv; // 取得初始化向量(作用-相当于随机'盐'值)
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);//此与加密不同点2
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
catch (Exception ex)
{
throw ex;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货