Как создать 64-битный зашифрованный ключ в алгоритме AES128?
Я новичок в концепции шифрования. Я работаю над небольшим проектом, мне нужно зашифровать контент, используя алгоритм AES128. Приемник нуждается в 64-битном зашифрованном ключе для расшифровки.
Но я думаю, что ключ генерируется в AES128 на основе строки. Тогда как сгенерировать 64-битный Enckey для расшифровки?
Мой код как ниже
public class AESencrp {
private static final String ALGO = "AES";
private static byte[] keyValue = {};
public static String encrypt(String Data, Key key) throws Exception {
System.out.println("Key Encryp ============="
+ new String(key.getEncoded()));
System.out.println("\n\n key in Enc ==========>" + key.getEncoded());
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
byte encryptedValue[] = new Base64().encode(encVal);
return new String(encryptedValue);
}
public static String decrypt(String encryptedData, Key key)
throws Exception {
System.out.println("Key Decryp ============="
+ new String(key.getEncoded()));
System.out.println("\n\n key in Dec ==========>" + key.getEncoded());
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new Base64().decode(encryptedData.getBytes());
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
public static void main(String[] args) throws Exception {
try {
String sPrivateKey = "privateKey";
keyValue = sPrivateKey.getBytes();
MessageDigest sha = MessageDigest.getInstance("SHA-1");
keyValue = sha.digest(keyValue);
keyValue = Arrays.copyOf(keyValue, 16); // use only first 128 bit
} catch (Exception e) {
e.printStackTrace();
}
Key key = new SecretKeySpec(keyValue, ALGO);
System.out.println("\n\n key in GK ==========>" + key.getEncoded());
System.out.println("\n\n key in GK ==========>"
+ new String(key.getEncoded()));
String password = "mypassword";
String passwordEnc = encrypt(password, key);
String passwordDec = decrypt(passwordEnc, key);
System.out.println("Plain Text : " + password);
System.out.println("Encrypted Text : " + passwordEnc);
System.out.println("Decrypted Text : " + passwordDec);
}
}
и результат, как показано ниже,
key in GK ==========>[B@a90653
key in Enc ==========>[B@de6ced
key in Dec ==========>[B@e80a59
Plain Text : mypassword
Encrypted Text : mBhBCUOlJbOBEaBl/42TZQ==
Decrypted Text : mypassword
Какой из них мне нужно поделиться с получателем? Может кто-нибудь мне помочь?
1 ответ
AES - это алгоритм симметричного шифрования. Итак, для шифрования и дешифрования ключи одинаковы. Таким образом, вы не "генерируете" ключ для расшифровки, вам нужно "иметь" его.
Для передачи ключей вы можете использовать RSA algorithm
(или любой из других алгоритмов асимметричного ключа). Вы должны иметь одинаковые ключевые компоненты с обеих сторон. В вашем случае есть один компонент, который является String (="privateKey")
, Итак, вам нужно сказать передать этот компонент, для которого я рекомендую асимметричное шифрование.
Зашифруйте "privateKey" с помощью открытого ключа, который можно расшифровать с помощью закрытого ключа. Затем используйте этот компонент для генерации ключа AES.
Узнайте больше об алгоритме RSA здесь