Функция переваривает строку (myKey) с использованием SHA-1, а затем использует первые 16 байтов результирующего дайджеста в качестве ключа для операции дешифрования AES128-ECB. Перед расшифровкой зашифрованный текст сначала декодируется в формате base64.
Чтобы переварить строку с использованием SHA-1, используйте следующий код: https://wiki.openssl.org/index.php/EVP_Message_Digests
Этот код фактически использует SHA- 256. Для этого вместо SHA-1 замените экземпляр EVP_sha256()
на EVP_sha1()
. Первые 16 байтов результата - это ваш «ключ».
Затем входное «значение» декодируется base64. Вот некоторый пример кода, чтобы сделать это с OpenSSL здесь:
http://www.ioncannon.net/programming/122/howto-base64-decode-with-cc-and-openssl/
Наконец, для выполнения операции расшифровки AES-ECB используйте код здесь:
https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption#Decrypting_the_Message
Этот код использует AES256-CB C. Для этого вместо AES128-ECB замените экземпляр EVP_aes_256_cbc()
на EVP_aes_128_ecb()
. Аргумент key
такой же, как вы рассчитали выше. Аргумент iv
для ECB просто NULL. Зашифрованный текст - это декодированные данные base64, которые вы вычислили выше. Обратите внимание, что часть «PKCS5PADDING» кода Java является значением по умолчанию в OpenSSL, так что ничего особенного для этого не требуется.
Открытый текст, который был выведен из операции дешифрования, является возвращаемым значением от вашей Java функции.