Мне нужно расшифровать строку base64, используя ключ base64 с режимом ECB, и заполнение Iso10126, используя DES.
Теоретически это просто:
const decryptedKeyDes = CryptoJS.DES.decrypt(
encryptedData, // QAKH7qnKxZTIta...
ResponseParser.secretKey, // MfKhm... length=32
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Iso10126
}
);
Я получаю sigBytes:162
ответ и после преобразования его в base64 (потому что тогда мне нужно распаковать), я получаю
byteLength:243
, что неправильно, это должно быть byteLength:395
(я просто сравниваю его с моим правильным Java кодом).
Я понятия не имею, что здесь не так.
Я также пытался сделать это, используя node.js х crypto
но я тоже ошибаюсь и другой результат. Я не могу найти, как установить padding
в crypto
, и я могу получить только utf8
, binary
или ascii
function encodeDesECB(textToEncode, keyString) {
var key = new Buffer(
"some key with 32 length".substring(0, 8),
"utf8"
);
var cipher = crypto.createDecipheriv("des-ecb", key, null);
cipher.setAutoPadding(false);
var c = cipher.update(textToEncode, "base64", "utf8");
c += cipher.final("utf8");
return c;
}
Код java:
import javax.crypto.Cipher
import static javax.crypto.Cipher.DECRYPT_MODE
//CIPHER_ALGORITHM_MODE_PADDING = 'DESede/ECB/ISO10126Padding'
Cipher decryptingCipher = Cipher.getInstance(CIPHER_ALGORITHM_MODE_PADDING)
decryptingCipher.init(DECRYPT_MODE, secretKeySpec)
decryptingCipher.doFinal(data)
, где secretKeySpec
- это объект с algorithm: DESede
и key
, что bit[]
равно моему.
Я понятия не имею, что не так в моем коде.
Работает ли CryptoJs
неправильно, или, может быть, я что-то забыл в своем декодировании.
У вас есть какие-нибудь подсказки, что может быть не так?