2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
您的加密數(shù)據(jù)是一個(gè)字節(jié)序列。如果需要將其編碼為字符串,則應(yīng)使用 base64 或用于編碼任意字節(jié)數(shù)組的類(lèi)似編碼。假裝您的任意字節(jié)數(shù)組是有效的字符串編碼會(huì)給您帶來(lái)麻煩,即使您使用ISO_8859_1
.

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
你的錯(cuò)誤在這里:
encryptedStr = new String(encrBytes);
strToBeEncoded.getBytes();
這些方法使用平臺(tái)默認(rèn)字符集,并且當(dāng)您從byte[]toString和 back轉(zhuǎn)換時(shí),在一般情況下byte[]是有損的。如果平臺(tái)默認(rèn)字符集是"ISO_8859_1".
我將所有 11 個(gè)這樣的調(diào)用更改為:
encryptedStr = new String(encrBytes, StandardCharsets.ISO_8859_1);
strToBeEncoded.getBytes(StandardCharsets.ISO_8859_1);
(我沒(méi)有改變CHARSET)。我現(xiàn)在得到的輸出是:
initVector 長(zhǎng)度 -> 16
輸入長(zhǎng)度 -> 48
AkhilRanjanBiharabcdefghijklmnopMovedtoChennai18
獎(jiǎng)勵(lì)警告 1:加密使用硬編碼,"AES/CBC/NoPadding"但解密是動(dòng)態(tài)的(當(dāng)然也應(yīng)該使用"AES/CBC/NoPadding")。
獎(jiǎng)勵(lì)警告2:機(jī)會(huì)是低,但它是完全可能的,"::"里面出現(xiàn)encrBytes,搞砸了你的str.split("::");。一種解決方案是搜索最后一次出現(xiàn)的"::"并且僅在其上進(jìn)行拆分。
添加回答
舉報(bào)