[英]Openssl (shell script) equivalent of java decryption code
需要有关 openssl 的帮助,以下 java 方法的 openssl 等价物是什么?
private static String decryptString(String value, String myKey) {
MessageDigest sha = null;
SecretKeySpec secretKey = null;
try {
byte[] key = myKey.getBytes("UTF-8");
sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16); // use only first 128 bit
secretKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return (new String(cipher.doFinal(Base64.decodeBase64(value))));
} catch (Exception e) {
System.out.println("Error while decrypting: " + e.toString());
}
return null;
}
该函数使用 SHA-1 对字符串 (myKey) 进行摘要,然后使用结果摘要的前 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-CBC。 让它做AES128-ECB而不是取代的实例EVP_aes_256_cbc()
与EVP_aes_128_ecb()
key
参数如您上面计算的那样。 ECB 的iv
参数只是 NULL。 密文是您在上面计算的 base64 解码数据。 请注意,Java 代码的“PKCS5PADDING”部分无论如何都是 OpenSSL 中的默认值,因此无需为此做任何特殊处理。
解密操作输出的明文是 Java 函数的返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.