月度归档:2018年02月

关于即将准备的密码储存功能问题汇总

互联网发展迅速,各种产品也是五花八门,各种社区、论坛(貌似意思差不多)、还有全球最大的“同性交友”社区GITHUB(嗯哼)???常用的还好说,但是很多小网站比如某些技术论坛,也就当时查资料可能需要用到注册了账号,过了很久很久以后(三年后···)扯远了,反正就是越来越多,密码呢也为了某个APP被各种泄露防止被通杀,这就考验记忆力了,时间久了密码都串了,深受其害啊~~~~~

所以下一个上线的小产品就是密码管理器了。名字还没想好,到时候再说,因逻辑简单过程虽然复杂,所以不考虑使用PHP框架,当然后续开发完善后会涵盖Windows、Web、Android、IOS等平台。

下面是基本框架:

用户基础账户:签名加密如MD5、SHA1、SHA256、SHA512当然不会这么简单啦。多复杂也没意义,被黑了都是浮云。

账户管理:

账户、密码都将采用RSA加密传输到服务器(这里用到的RSA密钥对是公共的根据周期进行更新),服务器解密后会使用另一套RSA进行二次加密(每个用户都是单独的RSA密钥对、如无特殊情况不进行更替)。

下面就是大致的流程图,目前还在你考虑细节,可能会有改动。如在如何安全储存用户信息方面。

HTML表单之JS-RSA加密PHP解密教程

 

随着互联网的日益发展,互联网安全成了重中之重。现在各大互联网公司开始废弃HTTP协议转向全站HTTPS加密传输。没有一种加密方式是绝对的安全,只是解密所获得的效益是否成正比。

 

我们最常见的登陆包含了用户个人的账户及密码,而密码在HTTP传输中是明文传输,这使得非法分子有机可乘,尤其是在连接公共WIFI时。

 

好吧我编不下去了,下面直接进入正题吧!!

不了解RSA加密的请  点击这里 查看百度的介绍。

本文源程序来自  OHDAVE.COM  可自行查阅

index.php:

<?php
$privateKey = file_get_contents(__DIR__.'/private_key.pem');
$private_key = openssl_pkey_get_private($privateKey);
$ciphertext = $_POST['string'];
if(!empty($ciphertext)){
$bin_ciphertext = base64_decode($ciphertext);
openssl_private_decrypt($bin_ciphertext, $plaintext, $private_key, OPENSSL_PKCS1_PADDING);
echo "密文:<br/>".$ciphertext;
echo "解密:<br/>".$plaintext;
}
?>
<html>
<head>
<script src="BigInt.js" ></script>
<script src="Barrett.js" ></script>
<script src="RSA.js"></script>
<script language="JavaScript">
var key;
function bodyLoad()
{
setMaxDigits(262);
key = new RSAKeyPair(
//这里是16进制数据
"10001",
"10001",
//rsa public key
"EDA017EBA532CD23754813203F4026C78EB9089FB7DA16ABBC5220C87BEC3B3C9684E8181AE8AE56CBAEE40BA5B2778A9BA4B59FF6C4FFFEB086E4BC288CC00E970C4CE0BEFAD7ED23FFD6D86F5B2B400ED11F20CCFF67D9DF6DA8620EE5CA20741265A5AF51AE2EF0B1D3834F3E90D5545D12CA67B629332F349020C9A5789B01BA147870108FC436CEEB401DD0BEADA4E2F0DB6AB6D506E7D0AD1C947FCEF38346E82F6D6048D2683494DE8E515243FD1C750C6E6195436BB6FA1F0E4BF86471AB30B34C2FCEEB1DAE8937C0B8DB265AC1067FF6EC46402AA2853B8D69C157C3B08F165C1976E799801F29FBD18516AAAC3B94901284202DF1E941EB9FB86F",
//
2048
);
}
function encryptString()
{
//加密
var ciphertext = encryptedString(key, document.subForm.string.value,
RSAAPP.PKCS1Padding, RSAAPP.RawEncoding);
//将转换后的HEX转换成ASIIC
document.subForm.string.value = window.btoa(ciphertext);
//控制台打印日志,调试使用
console.log(document.subForm.string.value);
//提交表单
document.subForm.submit();

}

</script>
</head>
<body onload="bodyLoad()">
<div>这是一个RAS加密解密测试代码</div>
<form action="index.php" name="subForm" method="post">
<label>请输入字符串<input type="text" name="string" value="123456"/></label>
<input type="button" value="提交" onclick="encryptString()"/>
</form>
</body>
</html>

js:
http://www.ohdave.com/rsa/BigInt.js
http://www.ohdave.com/rsa/Barrett.js
http://www.ohdave.com/rsa/RSA.js

以上例子就是基本的RSA加密了,具体的实现方法可自行研究。
PS:ASSIC大于127的字符,可通过其他方式转转移后加密解密。如转换成URL编码、UTF-8
源码点击这里这里这里->rsa<-