Почему следующий код выбрасывает java.security.invalidkeyexception: Исключение неправильного размера ключа (во время шифрования)? У меня есть строка EncryptPassword (String Password, String MasterPassword) и строка DecryptPassword (String пароль, String MasterPassword) Метод? Оба вызывают метод Byte [] des (byte [] inputbytes, string masterpassword, int mode) . Я хотел бы передать мастерсписное слово с произвольной длиной. < /P>
package com.example.passwordsafe.data;
import com.example.passwordsafe.core.usecases.EncryptionModuleInterface;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.util.Base64;
public class DESEncryption implements EncryptionModuleInterface {
private static final String PBKDF_ALGORITHM = "DES";
private static final String TRANSFORMATION = "DES/ECB/NoPadding";
@Override
public String encryptPassword(String password, String masterpassword) {
byte[] inputBytes;
byte[] outputBytes;
inputBytes = password.getBytes();
outputBytes = DES(inputBytes, masterpassword, Cipher.ENCRYPT_MODE);
Base64.Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(outputBytes);
}
@Override
public String decryptPassword(String password, String masterpassword) {
byte[] inputBytes;
byte[] outputBytes;
Base64.Decoder decoder = Base64.getDecoder();
inputBytes = decoder.decode(password);
outputBytes = DES(inputBytes, masterpassword, Cipher.DECRYPT_MODE);
return new String(outputBytes);
}
public byte[] DES(byte[] inputBytes, String masterpassword, int mode) {
byte[] outputBytes;
SecretKey key;
Cipher cipher;
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance(PBKDF_ALGORITHM);
DESKeySpec keySpec = new DESKeySpec(masterpassword.getBytes());
key = factory.generateSecret(keySpec);
} catch (NoSuchAlgorithmException | InvalidKeyException | InvalidKeySpecException e) {
throw new RuntimeException(e);
}
try {
cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(mode, key);
outputBytes = cipher.doFinal(inputBytes);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException |
BadPaddingException e) {
throw new RuntimeException(e);
}
return outputBytes;
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... g-key-size
Java des шифрование java.security.invalidkeyexception: неправильный размер ключей ⇐ JAVA
Программисты JAVA общаются здесь
1738447403
Anonymous
Почему следующий код выбрасывает java.security.invalidkeyexception: Исключение неправильного размера ключа (во время шифрования)? У меня есть строка EncryptPassword (String Password, String MasterPassword) и строка DecryptPassword (String пароль, String MasterPassword) Метод? Оба вызывают метод Byte [] des (byte [] inputbytes, string masterpassword, int mode) . Я хотел бы передать мастерсписное слово с произвольной длиной. < /P>
package com.example.passwordsafe.data;
import com.example.passwordsafe.core.usecases.EncryptionModuleInterface;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.util.Base64;
public class DESEncryption implements EncryptionModuleInterface {
private static final String PBKDF_ALGORITHM = "DES";
private static final String TRANSFORMATION = "DES/ECB/NoPadding";
@Override
public String encryptPassword(String password, String masterpassword) {
byte[] inputBytes;
byte[] outputBytes;
inputBytes = password.getBytes();
outputBytes = DES(inputBytes, masterpassword, Cipher.ENCRYPT_MODE);
Base64.Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(outputBytes);
}
@Override
public String decryptPassword(String password, String masterpassword) {
byte[] inputBytes;
byte[] outputBytes;
Base64.Decoder decoder = Base64.getDecoder();
inputBytes = decoder.decode(password);
outputBytes = DES(inputBytes, masterpassword, Cipher.DECRYPT_MODE);
return new String(outputBytes);
}
public byte[] DES(byte[] inputBytes, String masterpassword, int mode) {
byte[] outputBytes;
SecretKey key;
Cipher cipher;
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance(PBKDF_ALGORITHM);
DESKeySpec keySpec = new DESKeySpec(masterpassword.getBytes());
key = factory.generateSecret(keySpec);
} catch (NoSuchAlgorithmException | InvalidKeyException | InvalidKeySpecException e) {
throw new RuntimeException(e);
}
try {
cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(mode, key);
outputBytes = cipher.doFinal(inputBytes);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException |
BadPaddingException e) {
throw new RuntimeException(e);
}
return outputBytes;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79405704/java-des-encryption-java-security-invalidkeyexception-wrong-key-size[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия