加密相关

加密相关

加密的类型

对称加密

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

非对称加密

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

注意:公钥是由私钥生成的,公钥和私钥是一对一的

在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。

单向散列加密:

单向散列函数(也称杂凑函数、Hash函数)指的是根据输入消息计算后,输出固定长度数值的算法,输出数值也称为“散列值”或“消息摘要”,其长度通常在128~256位之间。

常见散列函数(Hash函数)有:

  1. MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值。
  2. SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值。
  3. MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息,常见的是HMAC(用于消息认证的密钥散列算法)。
  4. CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

使用openssl系列函数使用公钥私钥实现数据加密解密

首先生成公钥私钥并存入文件

<?php 
//第一步,生成一把新钥匙对象这是私钥对象
$key = openssl_pkey_new(); 
//第二步,把生成的私钥,保存成私钥文件 
openssl_pkey_export_to_file($key, './private.txt'); 
//下面这句注视的意思是,从现有的私钥文件,获取到私钥对象
//$key = openssl_get_privatekey(file_get_contents( './private.txt'));
//从私钥中,获取公钥字符串  后面['key']的意思是从这个数组中直接获取该键
$key_detail = openssl_pkey_get_details($key)['key'];
//把公钥字符串,保存成文件 
file_put_contents('./public.txt', $key_detail);
echo '完成';

然后模拟使用公钥私钥完成加密解密

<?php
//第一步,取出私钥。
$private_key=openssl_get_privatekey(file_get_contents('./privatekey.txt'));
//第二步,取出公钥
//从私钥里面取 ,理论上内存中计算要比文件中获取要快,两种方法任选其一
$public_key=openssl_get_publickey(openssl_pkey_get_details($private_key)['key']);

//原字符串
$origin_str='中英文Abc+123';
//使用公钥k加密函数进行加密,第一个参数原文,第二个参数是结果。 第三个参数是 公钥对象 (私钥对象会报错)
openssl_public_encrypt($origin_str, $crypted, $public_key);
//var_dump($crypted是乱码);
//使用公钥加密后。只能使用私钥解密函数进行解密,注意第三个参数是私钥对象
openssl_private_decrypt($crypted, $decrypted, $private_key);
var_dump($decrypted);
//也可以 相反的操作。 私钥加密,公钥解密。如下
//openssl_private_encrypt($origin_str, $crypted, $private_key);
//openssl_public_decrypt($crypted, $result, $public_key);
//vardump($result)也是原文

laravel框架使用crypt实现数据加密

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 存储用户的保密信息。
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function storeSecret(Request $request, $id)
    {
    
    
      /*//加密数据
        $pwd = '123456789';
        echo encrypt($pwd);die;
        //解密数据
        $str = "eyJpdiI6Ik93ZmFoRG1PVEFsOWtqY3ArWnYxMVE9PSIsInZhbHVlIjoiSnFSVkJFc3JNb0JmcEVZdGxGenRiK3orZlVBNzhrajJFMVV1YWtTXC84Q0k9IiwibWFjIjoiMjYyODExYjgzZWIwYWYyODVlOGM5MzQ1MDkxMjIzNzFlYzNhZTUzMzIzYjRiYTFjYzgyMDU2YmM2YjViN2UyYyJ9";
        $data = decrypt($str);
        echo $data;die;*/

      
       echo decrypt($str);die;
    
        $user = User::findOrFail($id);

        $user->fill([
            'secret' => encrypt($request->secret)
        ])->save();
    }
}

 

posted @ 2019-09-20 15:57  小※兽  阅读(200)  评论(0编辑  收藏  举报