PHP中的简单AES加密,Java中的解密
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP中的简单AES加密,Java中的解密,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2213字,纯文字阅读大概需要4分钟。
内容图文
我想实现一种简单但安全的方法,将一些信息从PHP脚本发送到Java客户端.我已经在这里仔细研究了几种实现,但是到目前为止,没有一种实现,现在我感到沮丧.我最后进行了一些编辑的是这个:
PHP:
function enc3($plaintext) {
$length = 16;
$key = openssl_random_pseudo_bytes($length);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
echo "\n".base64_encode($iv);
echo "\n".base64_encode($key);
}
enc3("test");
Java:
public static byte[] decrypt(byte[] key, byte[] initVector, byte[] encryptedValue) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector);
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/NOPADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(encryptedValue);
return original;
} catch (Exception ex) {
Logger.getLogger(MainGUI.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
...
byte[] encpryted = Base64.getDecoder().decode(rd.readLine());
byte[] iv = Base64.getDecoder().decode(rd.readLine());
byte[] key = Base64.getDecoder().decode(rd.readLine());
byte[] output = decrypt(key, iv, encpryted);
我得到一个:
javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes
关键只是为了在那里进行调试,当然,我会在工作时将其删除,并将其存储在客户端中.不确定执行此操作的最佳方法是什么,我想通过隐藏方式组合起来将其隐藏,服务器也知道如何生成它.但是我想它会在内存中可读,不是吗?
解决方法:
AES是一种分组密码,仅适用于16字节的分组.当您的密文长度不能被16整除时,此后将导致IllegalBlockSizeException.
您可以轻松地在PHP中为AES / CBC密码实现PKCS5填充,这基本上是一种标准的方式,用于将纯文本输入填充为块大小的精确倍数:
function pkcs5_pad($text) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $size - (strlen($text) % $size);
return $text . str_repeat(chr($pad), $pad);
}
然后更新您的加密功能以使用填充:
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
pkcs5_pad($plaintext), MCRYPT_MODE_CBC, $iv);
Java已经实现了对PKCS5的支持,只需更新AES密码初始化即可:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
内容总结
以上是互联网集市为您收集整理的PHP中的简单AES加密,Java中的解密全部内容,希望文章能够帮你解决PHP中的简单AES加密,Java中的解密所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。