这是我的第一个问题:
我希望PHP脚本在每个页面上包含加密的用户ID。然后我将使用JS读取它并将其发送到Java服务器,在那里我解码该值。
我想让它变得安全,以免人们伪造自己的身份证。 (别担心,这不会用于身份验证。)
加密的ID可能是MySQL的自动增量列1,2,3 ..而且我无法改变它。
这些属性很不错:
随意提出其他类型的解决方案。谢谢!
答案 0 :(得分:3)
使用安全散列函数来散列用户ID和定期更改的某个值的组合可能是一个好主意。例如,您可以每天选择一个128位的随机数,然后将ID设置为与用户ID连接的该值的哈希值。假设你使用一个好的哈希,比如SHA-256,这是加密安全的。
答案 1 :(得分:1)
使用用户ID散列时间戳的行可能是最好的,并检查给定时间戳和当前时间戳之间的时间差。您必须确保差异接受度足以说明任何服务器延迟。
答案 2 :(得分:0)
考虑使用数字必须通过的算法才能有效。银行卡,IMEI(移动电话)和其他一些主要的使用Luhn算法 - http://en.wikipedia.org/wiki/Luhn_algorithm
答案 3 :(得分:0)
我无法想到只使用JavaScript安全解密,因为您需要在源代码中包含密码,这不是很安全。
最好的方法是使用PHP加密和解密:您可以在JavaScript代码中调用PHP(使用AJAX。)
所以,例如:
encrypt.php
<?php
$password = "KEYVALUE";
$secret_text = "USERID HERE"
$encrypted_text = mcrypt_ecb(MCRYPT_DES, $password, $secret_text, MCRYPT_ENCRYPT);
echo $encrypted_text;
?>
然后你有一个名为decrypt.php的东西,所有这一切都接受一个GET参数,而ONLY输出是解密文本(没有HTML代码或任何东西。技术上你可能应该使用XML进行AJAX,但是因为它是只有一个值...)
decrypt.php
<?php
$password = "KEYVALUE";
$decrypted_text = mcrypt_ecb(MCRYPT_DES, $password, $_GET['decrypt'], MCRYPT_DECRYPT);
echo $decrypted_text;
?>
您可以通过调用
来测试它decrypt.php?解密= encrypted_string
从这里开始我会在JavaScript中调用“decrypt.php?decrypt = encrypted_string”脚本,然后JavaScript可以读取解密后的值。
可以在此处找到AJAX的简要介绍:http://www.yourhtmlsource.com/javascript/ajax.html。