GVKun编程网logo

如何解密用PHP方法openssl_encryp aes-256-cbc加密的Java数据?(php des加密解密)

3

本文将介绍如何解密用PHP方法openssl_encrypaes-256-cbc加密的Java数据?的详细情况,特别是关于phpdes加密解密的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您

本文将介绍如何解密用PHP方法openssl_encryp aes-256-cbc加密的Java数据?的详细情况,特别是关于php des加密解密的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于JAVA AES-128-CBC 加密 PHP7 OpenSSL 解密失败?、openssl enc -aes-256-ecb加密的文件java怎么解密、openssl_encrypt不被PHP识别、php aes 128 CBC加密、解密函数 php aes mcrypt php aes ecb php java aes加密解的知识。

本文目录一览:

如何解密用PHP方法openssl_encryp aes-256-cbc加密的Java数据?(php des加密解密)

如何解密用PHP方法openssl_encryp aes-256-cbc加密的Java数据?(php des加密解密)

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;
}

运行此代码,我得到以下异常:

Exception in thread “main” javax.crypto.BadPaddingException: Given final block not properly padded

它可以通过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.

故事的道德:不要混淆密码/字符串和密钥.

JAVA AES-128-CBC 加密 PHP7 OpenSSL 解密失败?

JAVA AES-128-CBC 加密 PHP7 OpenSSL 解密失败?

这是一段 JAVA 加密的代码,现在在转化为 PHP7 中的 OpenSSL 解密中,总是返回失败,Google 之后,感觉问题出现在 IV 偏移量上,但是不太清楚具体原因,下面贴上 JAVA 的加密和 PHP 解密的方法,希望对对称加密比较熟悉的不惜赐教。

JAVA Code:

public class SecurityUtil {
	public static byte[] encrypt(String content, String password) throws Exception {
		KeyGenerator kgen = KeyGenerator.getInstance("AES");
		SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
		secureRandom.setSeed(password.getBytes());
		kgen.init(128, secureRandom);

		SecretKey secretKey = kgen.generateKey();
		byte[] enCodeFormat = secretKey.getEncoded();
		SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");

		Cipher cipher = Cipher.getInstance("AES");
		byte[] byteContent = content.getBytes("utf-8");

		cipher.init(Cipher.ENCRYPT_MODE, key);
		return cipher.doFinal(byteContent);
	}

	public static byte[] decrypt(byte[] content, String password) throws Exception {
		KeyGenerator kgen = KeyGenerator.getInstance("AES");
		SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
		secureRandom.setSeed(password.getBytes());
		kgen.init(128, secureRandom);
		SecretKey secretKey = kgen.generateKey();
		byte[] enCodeFormat = secretKey.getEncoded();
		SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.DECRYPT_MODE, key);
		return cipher.doFinal(content);
	}

	public static String decrypt(String value, String password) {
		try {
			byte[] raw = password.getBytes();
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			IvParameterSpec iv = new IvParameterSpec(skeySpec.getEncoded());
			Cipher dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			dcipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
			return new String(dcipher.doFinal(asBin(value)));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}

}

PHP Code: 

public static function decrypt($plainText, $key){

   $key = substr(openssl_digest(openssl_digest($key, ''sha1'', true), ''sha1'', true), 0, 16);

   return openssl_decrypt(hex2bin($plainText), ''aes-128-cbc'', $key, OPENSSL_RAW_DATA);

}

有兴趣解决问题,红包答谢

openssl enc -aes-256-ecb加密的文件java怎么解密

openssl enc -aes-256-ecb加密的文件java怎么解密

openssl enc -aes-256-ecb -d 为文件加密,在java中怎么解

openssl_encrypt不被PHP识别

openssl_encrypt不被PHP识别

我可以运行openssl_encrypt ($string,$method,$pass); 当我通过PHP CMD运行它。 但是,当我通过Apache HTTP服务器运行它会引发以下错误:

Fatal error: Uncaught Error: Call to undefined function openssl_encrypt() in D:...lab.PHP:2 Stack trace: #0 {main} thrown in D:...lab.PHP on line 2

从命令行获取一个dropBox url

如何在Windows下处理seg错误?

我需要什么才能在Windows 7上编写程序集?

Mosquitto重新加载configuration文件

你可以在Windows Embedded CE 7.0上运行Adobe Air吗?

问题是,Apache没有完全安装,有一些丢失的文件。

所以我重新安装了Apache,问题就没有了。

总结

以上是小编为你收集整理的openssl_encrypt不被PHP识别全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

php aes 128 CBC加密、解密函数 php aes mcrypt php aes ecb php java aes加密解

php aes 128 CBC加密、解密函数 php aes mcrypt php aes ecb php java aes加密解

/*

* $data 加密的内容,$key 密钥

*/

function cbc_encrypt($data ,$key ) {

    $iv = $key;
    $padding = 16 - (strlen($data) % 16);
    $data .= str_repeat(chr($padding), $padding);
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
    return base64_encode($encrypted);
}
function cbc_decrypt($data,$key) {
    $iv = $key;
    $data = base64_decode($data);
    $data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
    $padding = ord($data[strlen($data) - 1]);
    return substr($data, 0, -$padding);
}

以上就介绍了php aes 128 CBC加密、解密函数,包括了php,aes方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

关于如何解密用PHP方法openssl_encryp aes-256-cbc加密的Java数据?php des加密解密的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于JAVA AES-128-CBC 加密 PHP7 OpenSSL 解密失败?、openssl enc -aes-256-ecb加密的文件java怎么解密、openssl_encrypt不被PHP识别、php aes 128 CBC加密、解密函数 php aes mcrypt php aes ecb php java aes加密解等相关内容,可以在本站寻找。

本文标签: