我一直在想一种方法来保护我的数据源(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");
}
}
最终可以从另一个页面获取随机静态密码,然后它可以是动态的......
不介意语法/编码错误。只是写下了我的头脑。
答案 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这样的真实加密算法会更加安全。这是一个示例,说明了为什么密钥很容易破解。如果你连续几天运行算法,你会得到:
20110905: 2235971776452495360
20110906: 2235971776452495388
20110907: 2235971776452495410
20110908: 2235971776452495428
20110909: 2235971776452495452
今天和明天之间的区别是28,明天和22之后的那天,然后是18,然后是24 ......那里有一个清晰的模式,你不需要在看到代码之前很长时间才能看到它。恶意方可以尝试使用与该模式匹配的几个数字,并很快就会遇到正确的数字。