这是保护数据馈送的明智方法吗?

时间:2011-09-05 09:32:53

标签: security cryptography

我一直在想一种方法来保护我的数据源(json字符串)免受第三方应用和使用它的网站的影响。

所以我想出了一种保护它的方法,但我对我的保护有多好感到好奇。

客户端

int passcode, int dateint
passcode = 15987456 //random static code
dateint = 20112805 // todays date all stuck together

return (((Integer.parseint(passcode + "" + dateint) * 9)/2)*15)/3  // stick the 2 numbers together and do random math on it.

在服务器端php

$passcode = 15987456 //random static code
$key = $_POST['key'];
$key = ((($key  / 9) * 2) / 15) * 3; // reverse the random math
if(substr($key, 0, strlen($passcode)) === $passcode){
    $dateyear = substr($key, strlen($passcode), 4);
    $datemonth = substr($key, strlen($passcode)+4, 2);
    $dateday = substr($key, strlen($passcode)+6, 2);
    if(!($dateyear === date(Y) && $datemonth === date(m) && $datedate === date(d))){
       die("access denied");
    }
}

最终可以从另一个页面获取随机静态密码,然后它可以是动态的......

不介意语法/编码错误。只是写下了我的头脑。

3 个答案:

答案 0 :(得分:4)

加密的首要规则之一是始终使用现有标准。如果你试图自己做,那么它就会变弱。使用客户端的公钥或Diffie Hellman在客户端站点建立密钥。

答案 1 :(得分:4)

如果您的应用程序(使用该应用程序)位于攻击者的计算机上,因此在他的控制下运行,那么实际上无法获取应用程序可以读取但攻击者无法读取的数据。

您可以通过加密数据使其变得更难,但加密密钥在程序中。有一些方法可以保护密钥(这称为白盒密码术,有关详细信息,请查看the white-box tag on crypto.stackexchange.com)。但是,攻击者可以简单地执行解密数据的程序部分。

您确实需要一些特定于用户的密钥(您和用户之间共享的密钥,或者您使用相应公钥加密数据的用户私钥)。

答案 2 :(得分:3)

我看到有三个直接问题:

  • 我理解你的代码只是一个例子,但你的随机数学不是很随机:x*9/2*15/3 == x*22.5。如果有人想打破他们的意愿。使用像md5或sha这样的真实加密算法会更加安全。
  • 在算法中使用今天的日期并不十分可靠:客户端可能位于世界的另一边,明天或者昨天,或者客户端计算机的时钟可能只是简单的。
  • 最后,如果被授权使用数据源的网站是公共网站,任何人都可以查看JavaScript代码并检查保护算法是什么,使得即使是最安全的算法也无用。

这是一个示例,说明了为什么密钥很容易破解。如果你连续几天运行算法,你会得到:

20110905:  2235971776452495360
20110906:  2235971776452495388
20110907:  2235971776452495410
20110908:  2235971776452495428
20110909:  2235971776452495452

今天和明天之间的区别是28,明天和22之后的那天,然后是18,然后是24 ......那里有一个清晰的模式,你不需要在看到代码之前很长时间才能看到它。恶意方可以尝试使用与该模式匹配的几个数字,并很快就会遇到正确的数字。