美好的一天,我需要使用 base64 编码加密一些文本并将编码数据传递给 .NET 应用程序。.NET 应用程序使用以下编码和解码形式。我已经尝试过这个等效于 Java 中的 CryptoStream .NET?. 为此,我按照上述链接使用了 Apache commons 编解码器。但是被 cryptoProvider.CreateEncryptor(bytes, bytes) 卡住了,当我检查 java 等效项中的第三个参数时-
Cipher.init(cipher.ENCRYPT_MODE,key,iv)
它必须是一个 IvParameterSpec。我不知道如何解决这个问题。希望得到一些帮助,干杯!
.NET 加密
static byte[] bytes = ASCIIEncoding.ASCII.GetBytes("mykey");
public static string Encrypt(string originalString)
{
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cryptoStream);
writer.Write(originalString);
writer.Flush();
cryptoStream.FlushFinalBlock();
writer.Flush();
return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}
相等的
Java 加密
void encrypt(String inputText) throws Exception {
try {
String myKey = "mykey";
byte[] mybyte = str.getBytes("ASCII");
//String plainIV = "1234567890ABCDEF";
KeySpec keySpec = new DESKeySpec(myKey.getBytes("ASCII"));
SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(keySpec);
//IvParameterSpec iv = new IvParameterSpec(org.apache.commons.codec.binary.Hex.decodeHex(plainIV.toCharArray()));
IvParameterSpec iv = new IvParameterSpec(mybyte);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,key,iv);
byte[] encoded = cipher.doFinal(inputText.getBytes("ASCII"));
System.out.println("Encoded Value ..... "+Base64.encodeBase64(encoded));
} catch(UnsupportedEncodingException e) {
System.out.println("Exception .. "+ e.getMessage());
}
在 .Net 中我得到这个 - AOb0B20x2onFGz+JaFBsZyFbvCS9WF49D 作为编码值,但在 java 中,我得到有线编码字符串 - =�SKNv?�N�Ɛq{���U�;�/Z����8�� <
编辑:-
跟随zacheusz并解决了编码问题,但.NET和java中的编码字符串不同......