理想情况下,我想加密变量,所以没有办法解决它们,但是假设客户端将通过javascript发送变量,并且如果他们看到代码可以解密任何东西,我正在寻找替代方案。
我正在考虑使用能够返回类似于md5或sha1的HEX的东西但加密然后将一些服务器时间或日期合并到变量中,以便加密仅在1-2分钟内有效。
javascript将具有混淆/最小化的功能,该功能将根据javascript将加密时间基于,然后将其发布到php。只要服务器的日期/时间为X分钟,它就会正确解密。
我想发送它似乎是随机数据,并找回似乎是随机数据。我不希望它是相同的数据。
这是最好的方法吗?我只是试图阻止那些尝试使用HTTP嗅探器的人。我知道一旦他们进入javascript源,没有什么可以阻止它给予足够的时间/了解正在发生的事情。
如果您要发布实际代码,请记住函数/功能应该存在于javascript和PHP5(< 5.3)上。我希望原生的简单/小函数不会为JS和PHP实现一个巨大的第三方类。
编辑:SSL / HTTPS是不可能的。
答案 0 :(得分:8)
如果您想阻止人们嗅探您的网络流量,请使用https而不是http。
如果你应该学习一件事,那就是加密很难。真的很难。如果你试图自己做,你就不会做对,并且可能会做出一些可能会在以后咬你的微妙错误。最好将加密保留给知道自己正在做什么的人。
答案 1 :(得分:4)
我认为HTTPS是不可能的。
你有没有想过ROT?愚蠢的简单实现至少:var output = "";
for(var i = 0; i < input.length; i++)
{
char = ( input.charCodeAt(i) + SOME_NUMBER ) %255;
output += String.fromCharacterCode( char )
}
然后,在PHP中
$chars = $_POST['chars'];
$output = "";
for($i = 0; $i < strlen($chars); $i++ )
{
$char = ord($chars[$i]) - SOME_NUMBER;
if($char < 0 )$char += 255;
$output .= chr($char);
}
答案 2 :(得分:3)
如果您想在Javascript上使用强大的PKI加密,则应检查jcryption。
答案 3 :(得分:0)
我建议AES加密是一个不错的选择。你可以在这里找到JavaScript库https://code.google.com/archive/p/crypto-js/和PHP https://packagist.org/packages/blocktrail/cryptojs-aes-php
现在在PHP方面:
<?php
include "vendor/autoload.php";
use Blocktrail\CryptoJSAES\CryptoJSAES;
$passphrase = "secret";
$text = "example value";
$encrypted = CryptoJSAES::encrypt($text, $passphrase);
echo "Encrypted: ", $encrypted, PHP_EOL;
输出:
Encrypted: U2FsdGVkX1/JVv/nS7aExFZiatvG8Lha7MflNsfuLHo=
我们使用加密代码并在JavaScript中解密:
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
</head>
<body>
<script>
const passphrase = "secret",
encrypted = "U2FsdGVkX1/JVv/nS7aExFZiatvG8Lha7MflNsfuLHo=";
decrypted = CryptoJS.AES.decrypt( encrypted, passphrase );
console.log( decrypted.toString( CryptoJS.enc.Utf8 ) );
</script>
</body>
</html>
在浏览器中启动此HTML后,您将获得JavaScript控制台:
example value
因此,您可以加密PHP中的敏感数据,并使用JavaScript在客户端应用程序中获取并解密。你可以在相反的方向做。只是不要忘记混淆JavaScript并使秘密看起来像一些JavaScript。
然而,您了解它并不是真正安全 - 只需付出相当大的努力,就可以找出加密方法,找到秘密并发现数据。