请不要问我为什么,我只是有一个.NET代码可以加密/解密数据字符串。现在我需要在Java中做出'完全相同'的功能。我尝试了几个DESede加密示例,但没有一个像.NET中的这个类一样给出相同的结果。
我甚至考虑过在.NET Web服务后面使用SSL来提供这两种在.NET中编写的方法,但在没有穷尽所有可能性之前,这样做太愚蠢了。
也许你们中与该领域更相关的Java人员会很快想到如何实现。
谢谢!
我甚至考虑过在.NET Web服务后面使用SSL来提供这两种在.NET中编写的方法,但在没有穷尽所有可能性之前,这样做太愚蠢了。
也许你们中与该领域更相关的Java人员会很快想到如何实现。
谢谢!
public class Encryption
{
private static byte[] sharedkey = {...};
private static byte[] sharedvector = {...};
public static String Decrypt(String val)
{
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
byte[] toDecrypt = Convert.FromBase64String(val);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, tdes.CreateDecryptor( sharedkey, sharedvector ), CryptoStreamMode.Write);
cs.Write(toDecrypt, 0, toDecrypt.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray());
}
public static String Encrypt(String val)
{
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
byte[] toEncrypt = Encoding.UTF8.GetBytes(val);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, tdes.CreateEncryptor( sharedkey, sharedvector ), CryptoStreamMode.Write);
cs.Write(toEncrypt, 0, toEncrypt.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
}
示例输入/输出
String plain = "userNameHere:passwordHere";
Console.WriteLine("plain: " + plain);
String encrypted = Encrypt(plain);
Console.WriteLine("encrypted: " + encrypted);
// "zQPZgQHpjxR+41Bc6+2Bvqo7+pQAxBBVN+0V1tRXcOc="
String decripted = Decrypt(encrypted);
Console.WriteLine("decripted: " + decripted);
// "userNameHere:passwordHere"