Я работаю над Java-приложением, которое требует использования двух ключей , сгенерированных из разных строк для шифрования и дешифрования. Один Строка поступает от пользователя, а другой - мастер-ключ. Я посмотрел на net и нашел несколько ссылок на него. Мне бы очень понравилась помощь в знании того, как это реализовать. Я покажу, что у меня есть.Создание и использование двух ключей для шифрования и дешифрования в Java
Так как вы можете видеть из кода, я использовал некоторый код из другого столбца stackoverflow и немного изменил его. Я просто не знаю, как сгенерировать 2 ключа из 2 строк и откуда я могу получить SecretKey desKey, используемый для дешифрования.
Код:
public class Encryption {
public void doStuff() {
String plaintext = "abc";
SecretKey k1 = generateDESkey();
SecretKey k2 = generateDESkey();
String firstEncryption = desEncryption(plaintext, k1);
String decryption = desDecryption(firstEncryption, k2);
String secondEncryption = desEncryption(decryption, k1);
System.out.println(firstEncryption);
System.out.println(decryption);
System.out.println(secondEncryption);
}
public static SecretKey generateDESkey() {
KeyGenerator keyGen = null;
try {
keyGen = KeyGenerator.getInstance("DESede");
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(Test.class
.getName()).log(Level.SEVERE, null, ex);
}
try {
assert keyGen != null;
keyGen.init(112); // key length 56
return keyGen.generateKey();
} catch (NullPointerException ex){
return null;
}
}
public static String desEncryption(String strToEncrypt, SecretKey desKey) {
try {
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, desKey);
return Base64.encode(cipher.doFinal(strToEncrypt.getBytes()));
} catch (NoSuchAlgorithmException | NoSuchPaddingException |
IllegalBlockSizeException | BadPaddingException |
InvalidKeyException ex) {
Logger.getLogger(Test.class
.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public static String desDecryption(String strToDecrypt, SecretKey desKey) {
try {
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, desKey);
return new String(cipher.doFinal(Base64.decode(strToDecrypt)));
} catch (NoSuchAlgorithmException | BadPaddingException | IllegalBlockSizeException
| InvalidKeyException | NoSuchPaddingException ex) {
Logger.getLogger(Test.class
.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
Если есть какие-либо путаницы или сомнений по этому поводу. Пожалуйста, дайте мне знать.
В чем проблема с текущим кодом? Любые исключения, такие как BadPaddingException? –
@ArtjomB. Я изменил его на DESede, но как я могу сгенерировать ключи из String для DESede? Плюс я смотрю, как я могу расшифровать, используя комбинацию из двух клавиш? –
Кроме того, кажется, вы делаете тройной Triple DES. Это нужно? –