2011-01-11 94 views
3

这是我的第一个问题:对PHP和Java中的短字符串进行安全加密

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

我想让它安全,以便人们不能伪造他们的ID。 (不要担心,这将不会用于身份验证。)

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

这些属性将是不错的有:

  • 经过加密的ID应该是唯一有效的一天,最好是一次性使用的/第二
  • 经过加密的ID不应该被轻易伪造(理想甚至由用户自己)

随意建议其他类型的解决方案。谢谢!

+3

您是否确实需要使用Java解码ID,或者您是否仅仅需要它来进行比较/数据库查找?如果你不需要解码它,散列可能是一个更直接的方法。 – jerluc 2011-01-11 09:06:45

+0

是的,我需要重视在服务器上解码。我有一个拼写错误,我说我会用JavaScript解码,对不起! – hakunin 2011-01-11 09:22:31

+0

这听起来像你正试图重新实施一个会议。有没有什么理由不想为此使用它们?这样,你不必传递一个ID,其他人不会轻易伪造他们,而不会劫持另一个用户的会话(HTTPS很好地解决了这个问题)。 – Hiro2k 2011-01-11 09:42:53

回答

3

使用安全散列函数来散列用户ID和周期性更改的某个值的组合可能是一个好主意。例如,您可以每天选择一个128位的随机数,然后将该ID设置为与该用户ID连接的值的散列。假设你使用了一个很好的哈希,比如SHA-256,这是加密安全的。

0

我想不出任何安全解密只有JavaScript,因为你需要在源代码中包含密码,这不是很安全。

最好的方法是加密和用PHP解密:(使用AJAX),你可以从JavaScript代码中调用PHP

因此,举例来说:

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参数,唯一的输出是解密的文本(没有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

1

沿用户ID标记时间戳的方法可能是最好的,并检查给出的时间戳与当前时间戳之间的时间差。您必须确保差异接受度足够大,以解决任何服务器延迟问题。

相关问题