PHP和Java中短字符串的安全加密

时间:2011-01-11 09:02:00

标签: java php encryption

这是我的第一个问题:

我希望PHP脚本在每个页面上包含加密的用户ID。然后我将使用JS读取它并将其发送到Java服务器,在那里我解码该值。

我想让它变得安全,以免人们伪造自己的身份证。 (别担心,这不会用于身份验证。)

加密的ID可能是MySQL的自动增量列1,2,3 ..而且我无法改变它。

这些属性很不错:

  • 加密的ID应仅在一天内有效,最好是一次使用/一次
  • 加密的ID不应轻易伪造(理想情况下甚至是用户自己)

随意提出其他类型的解决方案。谢谢!

4 个答案:

答案 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