我们试图找出如何在Java/Scala中做到这一点:perl的CBC DES等同于Java的
use Crypt::CBC;
$aesKey = "some key"
$cipher = new Crypt::CBC($aesKey, "DES");
$encrypted = $cipher->encrypt("hello world");
print $encrypted // prints: Salted__�,%�8XL�/1�&�n;����쀍c
print encode_base64($encrypted); // prints: U2FsdGVkX19JwL/Dc4gwehTfZ1ahNlO6Jf41vALcshg=
$decrypted = $cipher->decrypt($encrypted);
print $decrypted // prints: hello world
的问题是,Perl代码是我们不能chanage。 我尝试了一些东西,斯卡拉但并没有真正得到它的权利,例如像这样:
val secretKey = new SecretKeySpec("some key".getBytes("UTF-8"), "DES")
val encipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
encipher.init(Cipher.ENCRYPT_MODE, secretKey)
val encrypted = encipher.doFinal("hello world".getBytes)
println(encrypted) // prints: [[email protected]
println(java.util.Arrays.toString(encrypted)) // [-45, -126, -90, 36, 8, -73, 6, 85, -94, 108, 100, -120, 15, -8, 126, 76]
println(Hex.encodeHexString(encrypted)) //prints: 822c90f1116686e75160ff06c8faf4a4
我们最终需要做的是能够解密在Java中的cookie被Perl设置。 用Java/Scala的任何帮助或方向将非常理解
由于加密结果不是有效的文本编码,因此可能会打印输出中的“ ”字符。相反,base-64编码“$ encrypted”并打印。这会让我们更容易理解,因为我们会得到实际的结果进行比较,而不是其中的片段。 – erickson
感谢您的建议@erickson,我更新了perl和java的代码 – Dahdahm
这很让人困惑。你在PERL中使用UTF-8吗?我假设你需要“US-ASCII”(或其他编码)。另外,你应该使用'println(java.util.Arrays.toString(encrypted))' –