【发布时间】:2009-09-10 06:54:58
【问题描述】:
请不要问我为什么。我只是在 .NET 中有这个代码来加密/解密数据字符串。我现在需要在 java 中“完全”实现相同的功能。我已经尝试了几个 DESede crypt 的示例,但没有一个给出与 .net 中的此类相同的结果。
我虽然在 ssl 后面创建了一个 .net webserbvice 来为这两种用 .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"
【问题讨论】:
-
这是可行的。提供一些测试输入和输出。
-
我添加了示例输入/输出,谢谢!!
标签: c# java .net encryption 3des