基本概念

加密的意义

加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义。

加密方式分为对称加密和非对称加密

什么是对称加密?

对称加密只使用一个秘钥,加密和解密都使用该秘钥;

什么是RSA非对称加密?

使用一对秘钥,使用公钥加密,私钥解密。

RSA非对称加密 一对秘钥的生成

PHP中常用的非对称加密(即,公钥加密)的只要方式是rsa算法,需要通过原生的openssl_public_encrypt加密,openssl_private_decrypt解密。 也可以通过原生的openssl_private_encrypt加密,openssl_public_decrypt解密

前提

1. 我们假设Tom和Bob想要使用公钥加密方式进行通信,则他们首先要生成自己的秘钥对(公钥+私钥),然后交换公钥。
令:
Tskey表示Tom的私钥,Tpkey表示Tom的公钥
Bskey表示Bob的私钥,Bpkey表示Bob的公钥
(在公钥密码体制中,公钥对别人有用,私钥对自己有用)
2. Tom有Bpkey和Tskey;Bon有Bskey和Tpkey

加密和解密

用对方的公钥加密,用自己的私钥解密

Tom给Bob发消息:

加密结果 = RsaEncrypt(消息内容,Bpkey);

Bob收到了Tom发送的加密后的数据,进行解密

消息内容 = RsaDecrypt(加密结果,Bskey);

因为只有Bob只要Bskey,所以即使别人拦截到了加密数据,也不知道消息内容。

数字签名和验证

用自己的私钥进行签名,用对方的公钥进行验证

Tom给Bob发送了一封信,不过这个信的内容有可能在传输过程中被篡改过(即:重放攻击),或者别人以Tom的名义给Bob发送了新近。所以Tom在发送信的时候,需要附带一个签名,证明这封信是Tom发出的,并且签名和信件的内容是相关的。Bob在收到Tom的信之后,首先对签名进行验证,如果邮件被修改过,签名就会失效,验证失败。

Tom给Bob发信,使用自己的私钥,生成数字签名

数字签名 = RsaSign(信件内容,Tskey);

Bob收到Tom的来信,使用Tom的公钥,验证数字签名

验证结果 = RsaVerify(信件内容,数字签名,Tpkey);

php RSA非对称加密 的实现的更多相关文章

  1. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  2. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...

  3. RSA非对称加密Java实现

    原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...

  4. 前端js,后台python实现RSA非对称加密

    先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...

  5. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...

  6. ssh rsa 非对称加密 基本原理

    我们常用的ssh 免密登陆是用了 非对称加密的rsa算法(最为常用),与对称加密的相比会慢一些,但是更安全.秘钥长度超过768位无法破解. 默认长度是2048位(无法破解,非常安全) ssh-keyg ...

  7. RSA 非对称加密,私钥转码为pkcs8 错误总结

    RSA 非对称加密,私钥转码为pkcs8 错误总结 最近在和某上市公司对接金融方面的业务时,关于RSA对接过程中遇到了一个坑,特来分享下解决方案. 该上市公司简称为A公司,我们简称为B公司.A-B两家 ...

  8. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下:http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套公 ...

  9. javascript版前端页面RSA非对称加密解密

    最近由于项目需要做一个url传参,并在页面显示参数内容的需求,这样就会遇到一个url地址可能会被假冒, 并传递非法内容显示在页面的尴尬情况 比如xxx.shtml?server=xxx是坏人& ...

随机推荐

  1. 测试那些事儿—软测必备的Linux知识(二)

    linux常用命令 用户登录linux后,可以在Linux的命令提示符后面输入命令与系统进行交互. 1.磁盘管理 1.1 cd 切换目录:让登录用户在不同的目录间切换 常用的目录切换 cd~ 进入当前 ...

  2. 《Linux内核原理与分析》第七周作业

    课本:第六章 进程的描述和进程的创建 操作系统内核实现操作系统的三大管理功能 进程管理 内存管理 文件系统 在操作系统原理中,通过进程控制块PCB描述进程:在Linux内核中,通过一个数据结构stru ...

  3. Go Example--状态协程

    package main import ( "fmt" "math/rand" "sync/atomic" "time" ...

  4. MySQL:System.Data.Entity ,MySqlCommand, MySqlParameter and "LIKE" %

    Introduction Using GetSqlStringCommand with a text comparative, with LIKE, in ADO.NET and the MySQLP ...

  5. MDX函数

    MDX重点函数 成员函数 1..CurrentMember 获取运行时当前的成员,用法:<Dimension>.CurrentMember . 2..Parent 获取运行时当前的成员的父 ...

  6. 基于MATLAB System Generator 搭建Display Enhancement模型

    基于MATLAB System Generator 搭建Display Enhancement模型

  7. ubuntu10.04 32 编译android源码的问题

    ubuntu10.04 32 问题  没有jdk1.6     并且使用apt-get 安装jdk相当麻烦,参照:http://blog.csdn.net/godvmxi/article/detail ...

  8. Java遍历Map对象的方式

    public static void main(String[] args) { HashMap<String, String> testMap = new HashMap<> ...

  9. https://api.highcharts.com/gantt/

    <a href="https://api.highcharts.com/gantt/">https://api.highcharts.com/gantt/</a& ...

  10. Android入门(一) IDEA上创建Android应用之helloworld

    Android入门(一) IDEA上创建Android应用之helloworld 首先看运行结果: 一.准备工作 下载安装IntelliJ IDEA :我这里用的是2018.2.7 下载安装Genym ...