#java #encryption #cryptography #3des
#java #шифрование #криптография #3des
Вопрос:
Я написал этот код, мой ключ: «ooWqEPcw7KR / h / JIbrFCRHiEVaybvnB2».
try
{
Base64Decoder base64Decoder=new Base64Decoder();
String encryptType="DESede/ECB/PKCS5Padding";
String workingKey="ooWqEPcw7KR/h/JIbrFCRHiEVaybvnB2";
SecretKey secretKey=new SecretKeySpec(base64Decoder.decode(workingKey), encryptType);
Cipher cipher=Cipher.getInstance(encryptType);
cipher.init(1, secretKey);
}
catch(NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException e)
{
e.printStackTrace();
}
Но я получаю эту ошибку!!!
java.security.InvalidKeyException: Wrong algorithm: DESede or TripleDES required
at com.sun.crypto.provider.DESedeCrypt.init(DESedeCrypt.java:65)
at com.sun.crypto.provider.ElectronicCodeBook.init(ElectronicCodeBook.java:93)
at com.sun.crypto.provider.CipherCore.init(CipherCore.java:582)
at com.sun.crypto.provider.CipherCore.init(CipherCore.java:458)
at com.sun.crypto.provider.DESedeCipher.engineInit(DESedeCipher.java:166)
at javax.crypto.Cipher.implInit(Cipher.java:802)
at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
at javax.crypto.Cipher.init(Cipher.java:1249)
at javax.crypto.Cipher.init(Cipher.java:1186)
at EncryptText.main(EncryptText.java:24)
Комментарии:
1. новая спецификация SecretKeySpec(keyBytes, «Удаление»); Обратите внимание, что использование
1
intead ofCipher.ENCRYPT_MODE
не является хорошей идеей, используйте constatnts.2. Я использовал из Cipher. ENCRYPT_MODE, но не сработал. Приведенный выше код работает в Android Studio. но это не работает в IntellijIDEA
3. Вы изменили
new SecretKeySpec(keyBytes, "DESede");
?4. Да, да, да. Спасибо. у меня это работает. Вы сэкономили мое время.
Ответ №1:
Вы должны написать SecretKeySpec как
SecretKey secretKey=new SecretKeySpec(base64Decoder.decode(workingKey),"DESede");
Также используйте Cipher.ENCRYPT_MODE
и Cipher.DECRYPT_MODE
вместо констант.
Ответ №2:
DESedeCrypt
класс поддерживает только DESede
и TripleDES
алгоритмы, согласно исходному коду:
void init(boolean decrypting, String algorithm, byte[] keys)
throws InvalidKeyException {
if (!algorithm.equalsIgnoreCase("DESede")
amp;amp; !algorithm.equalsIgnoreCase("TripleDES")) {
throw new InvalidKeyException
("Wrong algorithm: DESede or TripleDES required");
}
Ваш код должен использовать одно из двух в SecretKey
. Cipher
Может оставаться как DESede/ECB/PKCS5Padding
:
String workingKey = "ooWqEPcw7KR/h/JIbrFCRHiEVaybvnB2";
SecretKey secretKey = new SecretKeySpec(
Base64.getDecoder().decode(workingKey),
"DESede");
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(1, secretKey);