我們試圖找出如何在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))' –