Я пытаюсь зашифровать класс Cipher некоторое время, и у меня все еще возникают проблемы. У меня проблемы с заполнением и размером массива байтов. Я получаю это исключение «Длина входной должна быть кратна 8 при расшифровке с мягким шифром» Это код, который я написал:Исключение при дешифровании строки
public CipherClass() {
try {
cipher = Cipher.getInstance(CIPHER_ALGO);
secKey = SecretKeyFactory.getInstance(CIPHER_ALGO).generateSecret(new DESedeKeySpec(new BigInteger(KEY, 16).toByteArray()));
}
catch(GeneralSecurityException e){
e.printStackTrace();
}
}
private String encrypt(String text){
try {
cipher.init(Cipher.ENCRYPT_MODE, secKey);
Base64 encoder = new Base64();
return new String(encoder.encode(cipher.doFinal(text.getBytes())));
}
catch(GeneralSecurityException e) {
e.printStackTrace();
}
return "";
}
private String decrypt(String text) {
try {
cipher.init(Cipher.DECRYPT_MODE, secKey);
Base64 decoder = new Base64();
return new String(decoder.decode(cipher.doFinal(text.getBytes())));
}
catch (Exception e) {
e.printStackTrace();
}
return "";
}
Я также попытался с помощью Hex вместо Base64 и я получаю это исключение: «Учитывая, что окончательный блок неправильно вставлен»
, пожалуйста, помогите мне, чтобы найти ошибку. благодарит заранее.
ли вы посмотрите на это: http://stackoverflow.com/questions/8049872/given-final-block-not-properly-padded – Kon
я класс для шифрования/дешифрования строк в прошлом году так же, как вам сделал. По причинам, которые я не помню, мне приходилось получать текстовые байты в формате UTF-8. Попробуйте изменить свою последнюю строку, например 'return new String (encoder.encode (cipher.doFinal (text.getBytes (Charset.forName (« UTF-8 »))));' – dic19
Вам нужно запустить декодер base64, прежде чем расшифровать , Операции должны отражать друг друга: 'encrypted = encrypt (plaintext)', 'encodedAndEncrypted = encode (encrypted)'; 'encrypted = decode (encodedAndEncrypted)', 'plaintext = decrypt (encrypted)' –