Мне поручено создать потребителя API, для которого требуется зашифрованный токен с начальным значением, которое соответствует времени UNIX.Показанный мной пример был реализован с использованием Java, с которым я не знаком, и после прочтения документации и других статей стека не смогли найти решение.
Использование javax.crypto.SecretKey
, javax.crypto.SecretKeyFactory
, *Для протоколов 1005 * и javax.crypto.spec.SecretKeySpec
мне нужно сгенерировать токен, подобный приведенному ниже:
public class EncryptionTokenDemo {
public static void main(String args[]) {
long millis = System.currentTimeMillis();
String time = String.valueOf(millis);
String secretKey = "somekeyvalue";
int iterations = 12345;
String iters = String.valueOf(iterations);
String strToEncrypt_acctnum = "somevalue|" + time + "|" + iterations;
try {
byte[] input = strToEncrypt_acctnum.toString().getBytes("utf-8");
byte[] salt = secretKey.getBytes("utf-8");
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKey tmp = factory.generateSecret(new PBEKeySpec(secretKey.toCharArray(), salt, iterations, 256));
SecretKeySpec skc = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skc);
byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
String query = Base64.encodeBase64URLSafeString(cipherText);
// String query = cipherText.toString();
System.out.println("The unix time in ms is :: " + time);
System.out.println("Encrypted Token is :: " + query);
} catch (Exception e) {
System.out.println("Error while encrypting :" + e);
}
}
}
Должен ли я использовать встроенную библиотеку hashlib
для реализации чего-то подобного?Я не могу найти документацию для реализации шифрования PBKDF2
с итерациями / солью в качестве входных данных.Должен ли я использовать pbkdf2
?Извините за смутные вопросы, я не знаком с процессом шифрования и чувствую, что даже просто зная, каким будет правильный конструктор, это шаг в правильном направлении.