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

在手机上有个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   密码

智能推荐

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

  1. 打造私有的DNS 服务

    在企业内部一般都会有自己的DNS服务,主要为了企业方便管理,例如访问一些内部系统,控制一些网站不让访问,今天我们就说说如何打造私有的DNS服务 系统基础配置 Ubuntu14.04  内存:354M ...

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

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  3. 新购买的vps应该做的几件事情

    1. 修改root密码      passwd   root 2.新建用户     useradd  vinentguo 3.配置免密码登陆 .使用新建用户登陆vps. mkdir ~/.ssh/ch ...

  4. 1.Magicodes.NET框架之路——起航

    1.Magicodes.NET框架之路--起航 前言 从事开发也好几年了,并且最近一直在做架构搭建的工作.这些时间,最大的感悟就是: 只有自己理解了的才是自己的. 对架构这块,若欲立之,必先破之. 故 ...

  5. 【强大美观易用的图像编辑器】Pixelmator Pro 1.2 for Mac

    图标 Icon   软件介绍 Description Pixelmator Pro是一个功能强大.美观.易于使用的图像编辑器,专为Mac设计.Pixelmator Pro 借助各种专业级的无损图像编辑 ...

  6. 解决在Mac上用pyenv安装python3失败的问题

    背景 前段时间在本地Mac系统上要跑一个python3写的压测脚本. Mac默认安装的是python2, 而且很多软件依赖的也是python2. 为了不影响现有系统其它软件, 当时安装了pyenv来实 ...

  7. Cisco Catalyst 9800-CL Wireless Controller for Cloud

    面向云的思科 Catalyst 9800-CL 无线控制器,专为基于意图的网络全新打造. 版本: C9800-CL-universalk9.17.04.01 (29-Nov-2020) C9800-C ...

  8. 打造属于自己的支持版本迭代的Asp.Net Web Api Route

    在目前的主流架构中,我们越来越多的看到web Api的存在,小巧,灵活,基于Http协议,使它在越来越多的微服务项目或者移动项目充当很好的service endpoint. 问题 以Asp.Net W ...

  9. Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本

    Dora.Interception 1.0(Github地址:可以访问GitHub地址:https://github.com/jiangjinnan/Dora)推出有一段时间了,最近花了点时间将它升级 ...

随机推荐

  1. C++的那些事:函数全解析

    一.函数的结构 函数在C++中可能出现在三种地方,一是函数的定义,它包括了如上图的结构:二是函数的声明,它与函数的定义相比,没有了函数体部分:三则是函数的调用.当然,不同的函数定义可以还会稍有不同,比 ...

  2. elk是指logstash,elasticsearch,kibana三件套,这三件套可以组成日志分析和监控工具

    Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志.kibana 也 ...

  3. packge-info.java

    packge-info.java是一个Java文件,可以添加到任何的Java源码包中.packge-info.java的目标是提供一个包级的文档说明或者是包级的注释. packge-info.java ...

  4. iOS Simulator功能介绍关于Xamarin IOS开发

    iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator.在没有iPh ...

  5. JavaScript 变量、函数与原型链

    定义 || 赋值 1-函数的定义 函数定义的两种方式: “定义式”函数:function fn(){ alert("哟,哟!"); } “赋值式”函数:var fn = funct ...

  6. javascript生成n至m的随机整数

    摘要: 本文讲解如何使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备. Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包 ...

  7. [Cocos2d-x For WP8]Menu菜单

    菜单栏这是游戏里面基本的控件来的, 头文件: #include <CCMenu.h>                        继承关系图:   头文件:  #include < ...

  8. shell运算

  9. Nginx配置文件nginx.conf中文详解(总结)

     PS:这篇是目前最完整的Nginx配置参数中文说明.更详细的模块参数请参考:http://wiki.nginx.org/Main                 #定义Nginx运行的用户和用户组 ...

  10. ckeditor的详细配置

    CKEditor 3 JavaScript API Documentation : http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.con ...