zoukankan      html  css  js  c++  java
  • 打造 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='账户列表';


    效果展示

    2.pic.jpg


    3.pic.jpg


    存在数据库中的密码都是加密过的,即使得到数据库没有私钥,也无法解密


    4.pic.jpg

    参考

    随机密码生成器,点击此处



    原文地址:打造 PHP版本 1password
    标签:1password   php   password   密码   

    智能推荐

  • 相关阅读:
    2015IBM上海的一道笔试题
    通过SQL进行远程访问
    TreeSet集合
    Linux学习(11-23)
    使用OpenSessionInViewFilter的注意事项
    css position 几种定位
    css jquery 实现轮播效果
    jquery Jsonp的使用
    struts2的分页标签
    Elipse clean后无法编译出class文件
  • 原文地址:https://www.cnblogs.com/apanly/p/5616027.html
Copyright © 2011-2022 走看看