Я пытаюсь создать зашифрованный токен, который должен быть отправлен как ответ REST API. Затем конечный пользователь может отправить тот же токен во время следующего запроса к этому API, и я могу проанализировать его и получить некоторую контекстную информацию (из предыдущего).
Поскольку я новичок в криптографии, я почувствовал, что этоЛучше взять Google tink
вместо того, чтобы писать код шифрования / дешифрования самостоятельно. Однако я не могу правильно расшифровать.
Я делаю шифрование / дешифрование следующим образом:
public class CipherUtils {
public static byte[] encrypt(byte[] plainText,
byte[] associatedData) throws GeneralSecurityException {
KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
Aead aead = keysetHandle.getPrimitive(Aead.class);
return aead.encrypt(plainText, associatedData);
}
public static byte[] decrypt(byte[] cipherText,
byte[] associatedData) throws GeneralSecurityException {
KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
Aead aead = keysetHandle.getPrimitive(Aead.class);
return aead.decrypt(cipherText, associatedData);
}
}
Вот как я генерирую токен:
String associatedData = "somethingUnique";
String data = "tokenToBeEncrypted";
byte[] ciphered = CipherUtils.encrypt(data.getBytes(), associatedData.getBytes());
String finalToken = Base64.getEncoder().encodeToString(ciphered);
Этот finalToken
отправляется обратно как ответ и также извлекается из следующего запроса.
Вот я пытаюсь расшифровать:
String associatedData = "somethingUnique"; // same one used for encrypting
String token = // retrieved from http request
byte[] decodedText = Base64.getDecoder().decode(token);
byte[] deciphered = CipherUtils.decrypt(decodedText, associatedData.getBytes());
Это всегда приводит к следующему исключению:
java.security.GeneralSecurityException: decryption failed
at com.google.crypto.tink.aead.AeadWrapper$WrappedAead.decrypt(AeadWrapper.java:82)
at CipherUtils.decrypt(CipherUtils.java:22)
Что мне здесь не хватает?
PS: я использую tink
версию 1.3.0-rc1