如何解密用PHP方法openssl_encryp aes-256-cbc加密的Java数据?
发布时间:2020-12-13 16:09:33 所属栏目:PHP教程 来源:网络整理
导读:public static void main(String[] args) throws Exception { String iv = "0102030405060708"; String key = "1882051051AgVfZUKJLInUbWvOPsAP6LM6nBwLn14140722186"; byte[] aaa = AES_cbc_decrypt("hv208Otx0FZL32GUuErHDLlZzC3zVEGRt56f8lviQpk=",key,iv
public static void main(String[] args) throws Exception { String iv = "0102030405060708"; String key = "1882051051AgVfZUKJLInUbWvOPsAP6LM6nBwLn14140722186"; byte[] aaa = AES_cbc_decrypt("hv208Otx0FZL32GUuErHDLlZzC3zVEGRt56f8lviQpk=",key,iv); System.out.println(new String(aaa)); } private static final String ALGORITHM = "AES/CBC/PKCS5Padding"; public static byte[] AES_cbc_decrypt(String content,String key,String iv) throws Exception { byte[] contentBytes = Base64.decode(content); byte[] keyBytes = key.substring(0,16).getBytes(); byte[] ivBytes = iv.getBytes(); SecretKeySpec keySpec = new SecretKeySpec(keyBytes,"AES"); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE,keySpec,new IvParameterSpec(ivBytes)); byte[] decbbdt = cipher.doFinal(contentBytes); return decbbdt; } 运行此代码,我得到以下异常:
它可以通过php方法解密 openssl_decrypt(base64_decode($encryptData),'aes-256-cbc',$key,OPENSSL_RAW_DATA,$iv); 解决方法
您尝试使用16字节或128位的密钥进行解密.但是,您一直在使用AES-256,其中256表示密钥大小:当然是32字节.
现在,诸如OpenSSL之类的C和C库通常使用指针算法来确定字节数.指定密钥时,它们通常采用指针地址和字节数(或者用于较低级别的库,32位字等) 因此,当指定大于32个字符/字节的密钥时,这个密钥可能会减少到32个字节(或者C中的字符,其中字节和字符会混淆).但是,在Java代码中,您将密钥减少到16个字节.这将导致在C中使用AES-256,在Java中使用AES-128. 故事的道德:不要混淆密码/字符串和密钥. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |