打造 PHP版本 1password
2016-06-25 11:20
856 查看
以前注册很多网站密码都使用简单密码,但是由于今年频繁曝出密码不安全问题,所以要使用更加复杂的密码。但是好多个账号,密码也不能设置成一样的,防止一个被盗全部不安全了,记密码就成了意见很头疼的事情。
在手机上有个1password软件,非常好,不过收费的。本着节约和利用自己的技能,自己就想到开发一个加密的账号功能
在php中有个ssl 加密功能,本文就是用此功能。步骤如下
数字,字符,特殊字符结合,长度大于10位
定期更换密码
存在数据库中的密码都是加密过的,即使得到数据库没有私钥,也无法解密
参考
随机密码生成器,点击此处
原文地址:打造 PHP版本 1password
标签:1password php password 密码
在手机上有个1password软件,非常好,不过收费的。本着节约和利用自己的技能,自己就想到开发一个加密的账号功能
在php中有个ssl 加密功能,本文就是用此功能。步骤如下
前提:什么样的秘密才安全
密码没有绝对安全的说数字,字符,特殊字符结合,长度大于10位
定期更换密码
一:生成私钥和公钥
$config = array( "digest_alg" => "sha512", "private_key_bits" => 4096, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); // Create the private and public key $res = openssl_pkey_new($config); // Extract the private key from $res to $privKey openssl_pkey_export($res, $privKey); file_put_contents("./account_private_key.pem",$privKey); // Extract the public key from $res to $pubKey $pubKey = openssl_pkey_get_details($res); $pubKey = $pubKey["key"]; file_put_contents("account_public_key.pem",$pubKey);
二:加密和解密函数
//解密函数,使用生成的私钥 private function decrypt( $txt ){ $txt = base64_decode($txt); $fp=fopen ( Yii::$app->params['account']['private_key_path'],"r"); $priv_key2=fread ($fp,8192); fclose($fp); $PK2=openssl_get_privatekey($priv_key2); $ret = openssl_private_decrypt($txt,$output,$PK2); if ( !$ret ) { return false; } return $output; } //加密函数,使用生成的公钥 private function encrypt( $txt ){ $fp=fopen (Yii::$app->params['account']['public_key_path'],"r"); $pub_key=fread ($fp,8192); fclose($fp); $PK = openssl_get_publickey($pub_key); if (!$PK) { return false; } $output=""; openssl_public_encrypt($txt,$output,$PK); if (!empty($output)) { openssl_free_key($PK); return base64_encode($output); } return false; }
三:数据表设计
CREATE TABLE `account_list` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题,用于搜索', `account` varchar(100) NOT NULL DEFAULT '' COMMENT '账号', `password` varchar(2000) NOT NULL DEFAULT '' COMMENT '通行证密码', `description` varchar(1000) NOT NULL DEFAULT '' COMMENT '描述', `updated_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '最后一次更新时间', `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_title` (`title`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='账户列表';
效果展示
存在数据库中的密码都是加密过的,即使得到数据库没有私钥,也无法解密
参考
随机密码生成器,点击此处原文地址:打造 PHP版本 1password
标签:1password php password 密码
相关文章推荐
- PHP_BUG: Notice: Undefined index
- ThinkPHP3.2.3添加水印
- FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- 【2016-12-25】(EI & ISTP)2017年第二届嵌入式系统和移动软件工程IEEE国际会议(ESMSE'2017)
- Web_PHP_Curl浅说;
- Sofia-SIP辅助文档十四 - Sofia SIP用户代理库 - "tport" - 传输模块
- 关于thinkphp连贯操作加锁的详细介绍lock
- thinkphp5.0的惰性加载
- php实现var_dump函数
- PHP闭包--匿名函数
- 使用PHP创建一个REST API(译)
- php编译安装php-amq扩展简明教程
- php好代码风格的阶段性总结
- php函数传值的引用传递注意事项分析
- php项目开发中用到的快速排序算法分析
- php日期操作技巧小结
- 打造 PHP版本 1password
- windows下使用PHP+ImageMagick压缩图片
- thinkphp3.2.2一个无限分类实现
- phpcms实现图文分离,文件上传到远程服务器的方法