谢谢你的帮助。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Encrypt with javascript and decrypt using php</title>
<meta name="generator" content="BBEdit 10.5" />
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/pbkdf2.js"></script>
<script>
function encrypt_me(obj)
{
// alert(obj.input_value.value);
var input_value = document.getElementById("input_value").value;
// alert(input_value);
var salt = CryptoJS.lib.WordArray.random(128/8);
var key256Bits500Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32, iterations: 500 });
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f'); // just chosen for an example, usually random as well
var encrypted = CryptoJS.AES.encrypt(input_value+"_Messsage", key256Bits500Iterations, { iv: iv });
var data_base64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = encrypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = encrypted.key.toString(CryptoJS.enc.Base64);
document.getElementById("data_base64").value = data_base64;
document.getElementById("iv_base64").value = iv_base64;
document.getElementById("key_base64").value = key_base64;
document.getElementById("encrypted_value").value = encrypted;
}
</script>
</head>
<body>
<?php
$mode = 'text'; // choices {"text", "hidden"}
if(isset($_POST['submit']))
{
echo('<pre>'.print_r($_POST, true).'</pre>');
$input_value = $_POST['input_value'];
$encrypted_value = $_POST['encrypted_value'];
$decrypted_value = $_POST['decrypted_value'];
$encrypted = base64_decode("data_base64"); // data_base64 from JS
$iv = base64_decode("iv_base64"); // iv_base64 from JS
$key = base64_decode("key_base64"); // key_base64 from JS
$decrypted_value = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted_value, MCRYPT_MODE_CBC, $iv ), "\t\0 " );
echo ("\$decrypted_value : ".$decrypted_value."<br />");
}
else
{
$input_value = "";
$encrypted_value = "";
$decrypted_value = "";
$encrypted = "";
$iv = "";
$key = "";
$plaintext = "";
}
?>
<form action="sample_encrypt.php" method="post" name="main_form" id="main_form">
input_value : <input type="text" id="input_value" name="input_value" value="<?=$input_value?>" size="100"><br />
encrypted_value : <input type="text" id="encrypted_value" name="encrypted_value" value="<?=$encrypted_value?>" size="100"><br />
decrypted_value : <input type="text" id="decrypted_value" name="decrypted_value" value="<?=$decrypted_value?>" size="100"><br />
<br />
data_base64 : <input type="<?=$mode?>" id="data_base64" name="data_base64" value="<?=$encrypted?>" size="100"><br />
iv_base64 : <input type="<?=$mode?>" id="iv_base64" name="iv_base64" value="<?=$iv?>" size="100"><br />
key_base64 : <input type="<?=$mode?>" id="key_base64" name="key_base64" value="<?=$key?>" size="100"><br />
<input type="button" id="no_submit" name="no_submit" value="Encrypt" onclick="encrypt_me(this.form);">
<br />
<input type="submit" id="submit" name="submit" value="Decrypt">
</form>
</body>
</html>
你需要改变三件事才能使它起作用。
首先,由于您使用的是128位AES,您的密钥必须是128位:
var key256Bits500Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32, iterations: 500 });
注意,我将keySize从256/32更改为128/32。
$encrypted = base64_decode($_POST["data_base64"]); // data_base64 from JS
$iv = base64_decode($_POST["iv_base64"]); // iv_base64 from JS
$key = base64_decode($_POST["key_base64"]); // key_base64 from JS
$encrypted_value = base64_decode($_POST['encrypted_value']);
我在这个网站上用AES-256加密一个虚拟字符串: https://www.devglan.com/online-tools/aes-encryption-decryption 具有以下参数: null 当我尝试用OpenSSL从命令行解密它时: 我得到这个错误:
客户端: 服务器端:
问题内容: 我正在尝试使用PyCrypto构建两个接受两个参数的函数:消息和密钥,然后对消息进行加密/解密。 我在网络上找到了几个链接可以帮助我,但是每个链接都有缺陷: 在codekoala上的此代码使用了os.urandom,PyCrypto不建议这样做。 此外,我不能保证给函数的键具有预期的确切长度。我该怎么做才能做到这一点? 另外,有几种模式,推荐哪种?我不知道该怎么用:/ 最后,IV到底是
我试图使用PyCrypto构建两个函数,它们接受两个参数:消息和密钥,然后加密/解密消息。 我在网上找到了几个帮助我的链接,但每一个都有缺陷: 编辑:删除了代码部分,因为它不安全。
就像我说的,一切都很好,除了这个小的decypt...我搜索了谷歌和所有的东西,尝试了示例代码,但似乎我的代码有些东西不对。
我遇到的情况是,JSON在PHP的中加密,需要在JAVA中解密。 此包含正确的数据,现在已解密。 现在,问题是当我试图做同样的事情在Java它不起作用:( 这是: 我已经访问了类似的问题,如 AES-256 CBC用php加密,用Java解密,反之亦然 openssl_在java中加密256个CBC原始_数据 无法在Java和PHP之间交换使用AES-256加密的数据 名单还在继续。。。。但是运气