打造 PHP版本 1password

Posted 即学即码工作室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打造 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   密码   

以上是关于打造 PHP版本 1password的主要内容,如果未能解决你的问题,请参考以下文章

电脑中的password=啥密码

1Password,Lastpass,Keepass,选择哪个做为密码管理器

1Password,Lastpass,Keepass,选择哪个做为密码管理器

More on 1Password’s Components

密码管理器上海道宁为您提供存储和使用强密码的简单方法工具软件——1Password

ruby KeePass 2 XML导出到1Password Mac CSV导入http://learn2.agilebits.com/1Password4/Mac/en/KB/import.html