项目要和第三方进行接口对接,所以数据的安全很重要。第一次自己设计并实现,学习记录下

网上查了很多资料,真的很深奥

对称加密:

  双方共用一个约定好的密钥进行数据的加密和解密,但是当密匙丢失,数据将有泄露风险。

实例:

$input_str = '阿达854aa';
echo '被加密的字符串:'.$input_str.'<br>';
$key = '159';
$iv = '1234567812345678';//须是16位
$encrypted = openssl_encrypt($input_str, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
echo '加密后的字符串:'.$encrypted.'<br>';
$data = base64_encode($encrypted);
echo '加密编码后的字符串:'.$data.'<br>';
$de_data = base64_decode($data);
echo '加密解码后的字符串:'.$de_data.'<br>';
$decrypted = openssl_decrypt($de_data, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
echo '解密后的字符串:'.$decrypted.'<br>';

  输出:

被加密的字符串:阿达854aa
加密后的字符串:���=8�++�-���
加密编码后的字符串:qqT4PTiJKyv/LRmng4UGBA==
加密解码后的字符串:���=8�++�-���
解密后的字符串:阿达854aa

  其中:

‘aes-128-cbc’是一种加密方法,可以使用openssl_get_cipher_methods()获取到。$key加密密钥,须和解密密钥一致。$iv密码初始化向量(16位)。

非对称加密:

  即双方使用不一样的密钥进行加密、解密,也就是公钥、私钥。届时,私钥加密的数据公钥可以解密。但是,公钥加密的数据只有私钥才可以解密。所以只要私钥保存完好,公钥丢失也不会影响数据的安全性。这种方式在网站上很常见,例如https传输

  具体实现:

首先要生成一对密钥 http://www.bm8.com.cn/webtool/rsa/

加密解密类库:

<?php

class Rsa {

    /**
* 获取私钥
* @return bool|resource
*/
private static function getPrivateKey()
{
$abs_path = dirname(__FILE__) . '/rsa_private_key.pem';
$content = file_get_contents($abs_path);
return openssl_pkey_get_private($content);
} /**
* 获取公钥
* @return bool|resource
*/
private static function getPublicKey()
{
$abs_path = dirname(__FILE__) . '/rsa_public_key.pem';
$content = file_get_contents($abs_path);
return openssl_pkey_get_public($content);
} /**
* 私钥加密
* @param string $data
* @return null|string
*/
public static function privEncrypt($data = '')
{
if (!is_string($data)) {
return null;
}
return openssl_private_encrypt($data,$encrypted,self::getPrivateKey()) ? base64_encode($encrypted) : null;
} /**
* 公钥加密
* @param string $data
* @return null|string
*/
public static function publicEncrypt($data = '')
{
if (!is_string($data)) {
return null;
}
return openssl_public_encrypt($data,$encrypted,self::getPublicKey()) ? base64_encode($encrypted) : null;
} /**
* 私钥解密
* @param string $encrypted
* @return null
*/
public static function privDecrypt($encrypted = '')
{
if (!is_string($encrypted)) {
return null;
}
return (openssl_private_decrypt(base64_decode($encrypted), $decrypted, self::getPrivateKey())) ? $decrypted : null;
} /**
* 公钥解密
* @param string $encrypted
* @return null
*/
public static function publicDecrypt($encrypted = '')
{
if (!is_string($encrypted)) {
return null;
}
return (openssl_public_decrypt(base64_decode($encrypted), $decrypted, self::getPublicKey())) ? $decrypted : null;
} }

调用demo:

    require_once "Rsa.php";
$rsa = new Rsa();
$data['name'] = 'Tom';
$data['age'] = '20';
$privEncrypt = $rsa->privEncrypt(json_encode($data));
echo '私钥加密后:'.$privEncrypt.'<br>'; $publicDecrypt = $rsa->publicDecrypt($privEncrypt);
echo '公钥解密后:'.$publicDecrypt.'<br>'; $publicEncrypt = $rsa->publicEncrypt(json_encode($data));
echo '公钥加密后:'.$publicEncrypt.'<br>'; $privDecrypt = $rsa->privDecrypt($publicEncrypt);
echo '私钥解密后:'.$privDecrypt.'<br>';

  输出:

私钥加密后:QwOppsd++LHg84d+d4ygfWRnEUFQhO63COVEE860p+U60EpuUBXlOX1W2ogLStNtOKWGfvNux6QETFG/iX8aL3ffWt+kPcxIpmvhCWlhfk6WI89CEaznGiumqgvwN7XMvQvPWs8LpQO9Cbhh5vxxTOJ5fbduzmpcPGQiFWEUzqw=
公钥解密后:{"name":"Tom","age":"20"}
公钥加密后:hoAK18Dlh+xrRh1fJHnbNiVYxB/j410MeMcHYP+BLCL4g47iMosPLVnOjzAr+wWMgXW9S8nrs3fsWJ0lkm4l6/BT9c5nBt2DjmE4W8H7shCHPw/fj1Yy3B9t9Z8MUfegxqdSEsROKTQ2hFmsz8oPhMcZRAek7x8qHWBomsUqtBk=
私钥解密后:{"name":"Tom","age":"20"}

先这样吧,将项目搞起来,以后再研究吧。先知道原理就可以了,至于具体为什么这么实现的,哈哈,不懂不懂,有心学但没那个力啊,深奥深奥

推荐几篇不错的加解密博文:

https://t.ti-node.com/thread/6497068236977209344

https://t.ti-node.com/thread/6497352274560417793

https://t.ti-node.com/thread/6497394198361145345

https://t.ti-node.com/thread/6499999246572322817

php中加密和解密的更多相关文章

  1. 浅谈.NET中加密和解密的实现方法分享

    这篇文章介绍了.NET中加密和解密的实现方法,有需要的朋友可以参考一下 .NET将原来独立的API和SDK合并到一个框架中,这对于程序开发人员非常有利.它将CryptoAPI改编进.NET的Syste ...

  2. .net中加密与解密

    .Net中的加密解密 引言 在一些比较重要的应用场景中,通过网络传递数据需要进行加密以保证安全.本文将简单地介绍了加密解密的一些概念,以及相关的数字签名.证书,最后介绍了如何在.NET中对数据进行对称 ...

  3. (译)利用ASP.NET加密和解密Web.config中连接字符串

    介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, A ...

  4. 利用ASP.NET加密和解密Web.config中连接字符串

    摘自:博客园 介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Se ...

  5. 在ASP.NET MVC环境中使用加密与解密

    在.NET Framework 4.5的NET框架中,在程序中加密与解密很方便.现在均学习ASP.NET MVC程序了,因此Insus.NET也在此写个学习的例子.在需要时可以参考与查阅. 写一个Ut ...

  6. (转)DES、RSA、MD5、SHA、随机生成加密与解密

    一.数据加密/编码算法列表   常见用于保证安全的加密或编码算法如下:   1.常用密钥算法   密钥算法用来对敏感数据.摘要.签名等信息进行加密,常用的密钥算法包括:   DES(Data Encr ...

  7. url加密和解密

    .NET中加密和解密有两种方式 string file="文件上(传)篇.doc";string Server_UrlEncode=Server.UrlEncode(file);s ...

  8. Web开发之编码与解码、签名、加密与解密

    在Web开发中,编码与解码.签名.加密与解密是非常常见的问题.本文不会介绍具体实例,而是介绍这些的原理.用途与区别.一.编码与解码        在Web开发中,需要通过URL的query参数来传递数 ...

  9. Java加密与解密的艺术 读书心得

    现在项目中加密与解密的方式很多,很早就想整理一下Java中加密与解密的方式,读完<<Java加密与解密的艺术>>一书.借此机会梳理一下这方面的知识点 一.基础普及 安全技术目标 ...

随机推荐

  1. python 计算机基础

    1.什么是编程语言. 语言是一个事物与另一个事物沟通的介质. 编程语言是程序员与计算机沟通的介质. 2.什么是编程. 编程是人按照某种语法规范设计出计算机能够识别的语言 表达的结果是程序,程序就是一系 ...

  2. linux Vi使用

    前言    在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式vi编辑器有3种模式:命令模式.输入模式.末行模式. ...

  3. 适用于Centos6.x系统的15项优化脚本

    1#!/bin/bash 2# Date: 2018-6-8 3#version:1.2 4#实现功能:一键系统优化15项脚本,适用于Centos6.x 5###################### ...

  4. Tom和Jerry在下棋

    题目描述 方法: 状压DP #include <cstdio> #define bc(x) (__builtin_popcount(x)) ; ; << maxn][maxn ...

  5. HDU3507-Print Article-斜率dp入门题

    为了学CDQ分治,从斜率dp和凸包开始做吧.. 代码就是维护一个凸包.利用递增的性质丢掉不合适的点. http://www.cnblogs.com/Rlemon/p/3184899.html 代码学的 ...

  6. Number Sequence POJ - 1019 递推 数学

    题意 1 12 123 1234 12345 ....这样的序列 问第n位数字是几   是数字! 1-9! 思路:递推关系 主要是位数的计算   用a[i]=a[i-1]+(int)log10((do ...

  7. Codeforces1023E Down or Right 【贪心】

    题目分析: 从起点开始询问终点连通性,优先右走.从终点开始询问起点连通性,优先上走. 代码: #include<bits/stdc++.h> using namespace std; in ...

  8. centos6.8下安装matlab2009(图片转帖)

    前言 如何优雅的在centos6.8上安装matlab2009. 流程 不过我个人安装过程完后启动matlab的时候又出现了新问题: error while loading shared librar ...

  9. swagger2 如何匹配多个controller

    方法一:使用多个controller的共同拥有的父类,即精确到两个controller的上一级 @Bean public Docket createRestApi() { return new Doc ...

  10. [算法进阶0x10]基本数据结构C作业总结

    t1-Supermarket 超市利润 题目大意 给定n个商品,每个商品有利润pi和过期时间di.每天只能卖一个商品,过期商品不能卖.求如何安排每天卖的商品可以使收益最大. 分析 一开始打了一个复杂度 ...