打造 PHP版本 1password

以前注册很多网站密码都使用简单密码,但是由于今年频繁曝出密码不安全问题,所以要使用更加复杂的密码。但是好多个账号,密码也不能设置成一样的,防止一个被盗全部不安全了,记密码就成了意见很头疼的事情。

在手机上有个1password软件,非常好,不过收费的。本着节约和利用自己的技能,自己就想到开发一个加密的账号功能

在php中有个ssl 加密功能,本文就是用此功能。步骤如下

前提:什么样的秘密才安全

  1. 密码没有绝对安全的说
  2. 数字,字符,特殊字符结合,长度大于10位
  3. 定期更换密码

一:生成私钥和公钥

$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   密码

时间: 2024-11-08 19:17:34

打造 PHP版本 1password的相关文章

【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service docker stop  #停止服务 service docker restart #重启服务 service docker status   #查看服务状态 启动Docker服务 docker是一个CS模型,需要先启动服务端,直接执行 sudo service docker start 启动docker

那些让你震惊的网站

仿知网 https://www.cn-ki.net/ 仿知网是一个完全可以代替知网的精品网站:是一个非常强大的论文搜索网站. 首先这个网站的论文检索结果和知网的搜索结果基本一样,而且这个网站每个账号前期免费提供论文下载,当你的下载次数没了,你完全可以用其它邮箱再注册其它账号使用:当然,如果你不想再注册账号,这个网站提供一块钱随意下载论文一天,也是非常值得尝试. 总体而已,如果需要下载论文,这个网站是一个非常好的选择. 全球电视直播 http://bddn.cn/zb.htm 全国电视直播是一个功

1. MagicCode框架之路——起航

前言 从事开发也好几年了,并且最近一直在做架构搭建的工作.这些时间,最大的感悟就是: 只有自己理解了的才是自己的. 对架构这块,若欲立之,必先破之. 故此,才准备利用业余时间来倾力打造这套框架.由于时间精力以及能力有限,也许这套框架初期会有很多不合理之处,但是我相信只要有恒心,这套框架迟早会打磨完美.由于本人秉承做一行爱一行的原则,对代码也比较痴迷,故此命名为"MagicCode框架",希望它的将来会不辱此名. 在接下来的时间里,我将长期维护此框架并且发帖发表心得. MagicCode

微软越来越喜欢Github(转载)

http://www.linuxidc.com/Linux/2015-01/112048.htm GitHub是基于微软最大的敌人.Linux之父林纳斯·托瓦兹为托管Linux核心代码量身打造Git版本控制系统上的.2002年时,林纳 斯·托瓦兹使用的是BitKeeper作为Linux内核主要的版本控制系统,以此来维护代码.2005年,BitKeeper的著作权拥有 者,Larry MaVoy,宣称安德鲁·垂鸠曾试着以逆向工程手法来解析BitKeeper内部使用的协议,因此决定收回使用BitKe

从房产中介到程序员--80后张江男

序言 成都,一座来了就不想离开的城市,此刻,我坐在咖啡厅,享受午后惬意的阳光,等待着相亲女孩的到来.没过多久,一个身穿红色呢子大衣.黑色丝袜.高跟鞋的女孩和她母亲以及介绍人,出现在我的眼帘.这女孩我第一眼满意,干净利落的打扮,飘逸的长发,大衣高跟鞋大红的颜色将唇红的性感淋漓尽致地衬托出来. 到楼下将女孩和几个阿姨领上卡座,翘起二郎腿,靠着沙发,偶尔啜一口饮料,便开始介绍自己的情况. "我叫周勇",今年29岁,30也快了,身高172,体重140斤,独生子女,无负担,目前在高新区环球中心工

Magicodes框架之路——起航

前言 从事开发也好几年了,并且最近一直在做架构搭建的工作.这些时间,最大的感悟就是: 只有自己理解了的才是自己的. 对架构这块,若欲立之,必先破之. 故此,才准备利用业余时间来倾力打造这套框架.由于时间精力以及能力有限,也许这套框架初期会有很多不合理之处,但是我相信只要有恒心,这套框架迟早会打磨完美.由于本人秉承做一行爱一行的原则,对代码也比较痴迷,故此命名为"Magicodes框架". Magicodes ——意为"Magic Codes".代码就如同魔术,每一个

【FastDev4Android框架开发】打造QQ6.X最新版本侧滑界面效果(三十八)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50253925 本文出自:[江清清的博客] (一).前言: 这两天QQ进行了重大更新(6.X)尤其在UI风格上面由之前的蓝色换成了白色居多了,侧滑效果也发生了一些变化,那我们今天来模仿实现一个QQ6.X版本的侧滑界面效果.今天我们还是采用神器ViewDragHelper来实现,之前我们以前基于ViewDragHelper的使用和打造QQ5.X效果了,基本使用方法可以点

virtual PC 打造IE6、IE7、IE8、IE9等多版本共存原版测试环境

多版本IE共存是web开发者测试环境下的必备基础.使用原生态的测试环境更为准确严谨不易出错.而打造一个多版本IE共存于一个操作系统并能快速打开能够提高web开发者的工作效率. 一.安装 Windows Virtual PC 访问微软官网下载适合的版本   http://www.microsoft.com/zh-CN/download/details.aspx?id=3702 二.安装 Windows XP Mode 访问微软官网下载适合的版本   http://www.microsoft.com

在.net下打造mongoDb基于官方驱动最新版本

还是一如既往先把结构图放出来,上上个版本添加了redis的缓存,但是不满足我的需求,因为公司有项目要求是分布式所以呢,这里我就增加了mongoDb进行缓存分布式,好了先看结构图. 总的来说比较蛋疼,因为从来没有使用过mongoDB,从安装,到转为windows服务,设置权限等等,好吧这都是题外话. 在写这个MongoDB版本的时候遇到的一些问题,我先总结下: 1.MongoDb版本是官网最新版3.4.4,官方驱动为2.4.3,首先我的项目是以GUID做为主键,在往MongonDB中插入时遇到的是