javascript - 关于使用 crypto-js AES加密 PHP后端解密的问题?求梳理求讲解

WBOY
Libérer: 2016-06-06 20:47:45
original
1581 Les gens l'ont consulté

看了一下关于加密登陆的相关内容,确实没有证书不是https方式的登陆很不安全,POST的值能全部看到。
找了一些资料关于js加密php解密的资料,但是还是不是非常清楚,
大概思路是通过前台向后台发出请求获得一个密钥,然后前台进行加密,传到后端解密。
(没有证书只是简单的js加密)
问题
1. 在前台向后台请求密钥的时候是不是就有安全隐患,不管是存在cookie还是session
2. 确实很多概念还不清楚就来提问了,但是希望大神能帮忙梳理一下。

http://skysbird.duichenmei.com/?p=306 看到了一下这个代码,思路清晰了一些。

又在网上搜索了到这两段代码。
------javascript


<code class="lang-javascript"><script> var key_hash = CryptoJS.MD5("Message");
    var key = CryptoJS.enc.Utf8.parse(key_hash);
    var iv  = CryptoJS.enc.Utf8.parse('1234567812345678');
    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
    document.write("encode:"+encrypted);
</script>
</code>
Copier après la connexion
Copier après la connexion

php------

<code class="lang-php">$text = "Message";
$key = md5($text);  //key的长度必须16,32位,这里直接MD5一个长度为32位的key
$iv='1234567812345678';
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$decode = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypttext, MCRYPT_MODE_CBC, $iv);
echo base64_encode($crypttext);
echo "<br>";
echo $decode;
echo "<br>";

</code>
Copier après la connexion
Copier après la connexion

如果是对应的,js的encrypted 传到php 值是和$crypttext 相等,但是mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypttext, MCRYPT_MODE_CBC, $iv); 中的$key 是md5的$text。搞不清白了。
求简单细致解说。

回复内容:

看了一下关于加密登陆的相关内容,确实没有证书不是https方式的登陆很不安全,POST的值能全部看到。
找了一些资料关于js加密php解密的资料,但是还是不是非常清楚,
大概思路是通过前台向后台发出请求获得一个密钥,然后前台进行加密,传到后端解密。
(没有证书只是简单的js加密)
问题
1. 在前台向后台请求密钥的时候是不是就有安全隐患,不管是存在cookie还是session
2. 确实很多概念还不清楚就来提问了,但是希望大神能帮忙梳理一下。

http://skysbird.duichenmei.com/?p=306 看到了一下这个代码,思路清晰了一些。

又在网上搜索了到这两段代码。
------javascript


<code class="lang-javascript"><script> var key_hash = CryptoJS.MD5("Message");
    var key = CryptoJS.enc.Utf8.parse(key_hash);
    var iv  = CryptoJS.enc.Utf8.parse('1234567812345678');
    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});
    document.write("encode:"+encrypted);
</script>
</code>
Copier après la connexion
Copier après la connexion

php------

<code class="lang-php">$text = "Message";
$key = md5($text);  //key的长度必须16,32位,这里直接MD5一个长度为32位的key
$iv='1234567812345678';
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$decode = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypttext, MCRYPT_MODE_CBC, $iv);
echo base64_encode($crypttext);
echo "<br>";
echo $decode;
echo "<br>";

</code>
Copier après la connexion
Copier après la connexion

如果是对应的,js的encrypted 传到php 值是和$crypttext 相等,但是mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypttext, MCRYPT_MODE_CBC, $iv); 中的$key 是md5的$text。搞不清白了。
求简单细致解说。

  1. 对。密钥通过明文传播就会有加密隐患。另外有更可怕的例子,已证实有中国运营商直接把用于加密的JS函数给改了。
  2. 在JS中和PHP中,这里都使用了同一个密钥生成规则:自定义一个String,然后用其MD5值做AES密钥。这样一来会避免密钥长度补齐之类的问题。
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!