公钥加密

PHP的学习--RSA加密解密

馋奶兔 提交于 2019-11-29 18:14:13
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了。 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了。 密码没加密,那攻击者就直接拿到了密码,这是最搓的。 密码加密了,是不可逆加密,那攻击者只需要模拟那个请求即可登录。 密码加密了,是可逆加密,其中携带有时间等参数,后台可以根据时间等参数来判断是否有效,但因为是在前端加密,其加密方式也能在代码中找到,找到加密方式就可以得出解密方式。 但是如果我们使用非对称加密就可以避免以上问题。 非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。 工作过程如下,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。 乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。 得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。 乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。 在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。 同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

信息的加密与解密

僤鯓⒐⒋嵵緔 提交于 2019-11-29 15:16:38
信息的加密与解密 信息的加密现有两种 对称加密:使用同一个密钥对信息进行加密和解密称为对称加密。 使用场景:A与B共同约定并存储一个密钥。 A -> B: A 使用密钥对数据进行加密后得到加密的信息发送给 B,B 使用该密钥对加密的信息进行解密,得到原始信息。 B -> A: B 使用密钥对数据进行加密后得到加密的数据发送给 A,A 使用该密钥对加密的数据进行解密,得到原始数据。 优点:加密解密速度快。 缺点: 相对不安全,由于 AB 双方使用的是同一个密钥进行加密解密,任何一方的密钥泄漏,整个加密解密过程就暴露了。 在与多方进行通信的时候必须使用不同的密钥,多个密钥造成密钥管理困难。如果 A 与 B 通信时和 A 与 C 通信时使用的是同一个密钥,那么如果 C 获取到了 A 与 B 通信时加密的信息就可以使用密钥进行解密,造成 A 与 B 之间信息的泄露。 非对称加密:加密和解密使用不同的密钥。如果加密使用的是公钥,那么就必须要私钥来解密。如果加密使用的是私钥,必须要公钥进行解密。在此需要先了解公钥、私钥这两个概念。 公钥:供给别人使用的密钥,使用公钥对信息加密的过程称之为加密,主要目的为防止信息传输过程中的泄漏。因为用于解密的私钥只有自己拥有。 私钥:供给自己使用的密钥,使用私钥对信息加密的过程称之为签名,主要目的是为了确保信息是由自己发出的

1.http 协议和 https 协议的原理

心已入冬 提交于 2019-11-29 14:18:53
首先,我们得知道应用层是 OSI 七层网络模型的第七层,不同类型的网络应用有不同的通信 规则,因此应用层协议是多种多样的,比如 DNS、FTP、Telnet、SMTP、HTTP、 等协议都 是用于解决其各自的一类问题。 http 通信协议的基本原理 http 协议在远程通信场景中的应用还是挺广泛的,包括现在主流的微服务架构的通信都是基 于 http 协议。由于经常使用的关系,所以大家对 http 协议的理解还是比较深刻,我这里就直 接帮大家梳理一下 http 协议的基本原理。 一次 HTTP 请求的通信流程 我们先来思考一个问题,我们在浏览器上输入一个网址后,浏览器是如何展示目标网址的内 容的?内容是从哪里来的呢? 来通过图形把这个过程画一下 DNS: (Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名 到 IP 地址之间的解析服务, 用户通常使用主机名或域名来访问对方的计算机,而不是直接通 过 IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算 机名更符合人类的记忆习惯。 但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。为 了解决上述的问题,DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务 HTTP 通信协议的组成

公钥加密-DES-RSA

我怕爱的太早我们不能终老 提交于 2019-11-29 11:42:36
公理 双方使用同一规则加密 --------- 密钥(对称加密算法 DES ) data encryption standard 最大问题 双方一起制定 -------- 办法:密钥交换算法,不用直接传递密钥 ------------------ 私钥(非对称加密算法 RSA ) 三位数学家 Rivest 、 Shamir 和 Adleman 互质关系 除了 1 以外,没有其他公因子 比如, 15 和 32 没有公因子 : 任意两个质数构成互质关系,比如 13 和 61 。 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如 3 和 10 。 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如 97 和 57 。 1 和任意一个自然数是都是互质关系,比如 1 和 99 。 p 是大于 1 的整数,则 p 和 p-1 构成互质关系,比如 57 和 56 。    6. p 是大于 1 的奇数,则 p 和 p-2 构成互质关系,比如 17 和 15 。 欧拉函数 任意正整数 n ,请问在 <= n 的正整数之中,有多少个与 n 构成互质关系? ----- 欧拉函数 Φ(n) = n * (1 - 1/p1)*(1 - 1/p2)*(1 - 1/p3)*(1 - 1/p4) Φ(1323) = Φ(3^3 * 7^2) = 1323 * ( 1 - 1/3 )(

RSA加密解密与加签验签

好久不见. 提交于 2019-11-29 10:14:09
RSA 加密解密与加签验签    RSA 公钥加密算法是 1977 年由罗纳德·李维斯特( Ron Rivest )、阿迪·萨莫尔( Adi Shamir )和伦纳德·阿德曼( Leonard Adleman )一起提出的。 1987 年 7 月首次在美国公布,当时他们三人都在麻省理工学院工作实习。 RSA 就是他们三人姓氏开头字母拼在一起组成的。    RSA 是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被 ISO 推荐为公钥数据加密标准。    RSA 公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。   在公开密钥密码体制中,加密密钥(即公开密钥) PK 是公开信息,而解密密钥(即秘密密钥) SK 是需要保密的。加密算法 E 和解密算法 D 也都是公开的。虽然解密密钥 SK 是由公开密钥 PK 决定的,但却不能根据 PK 计算出 SK 。   基于这种理论, 1978 年出现了著名的 RSA 算法,它通常是先生成一对 RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可以在网络服务器中注册。为提高保密强度, RSA 密钥至少为 500 位长,一般推荐使用 1024 位。这就使加密的计算量很大。    RSA

简单实现SSH免密登录

随声附和 提交于 2019-11-29 06:31:05
密钥验证: 虚拟机1生成一个公钥和私钥然后将公钥复制给虚拟机2中的authorized_keys中。 虚拟机1需要登录虚拟机2时它会带着公钥访问虚拟机2,虚拟机2查询authorized_keys是否存在此公钥。 如果存在,虚拟机2生成一串随机字符并使用此公钥进行加密,然后返回给虚拟机1,虚拟机1使用私钥进行解密后返回给虚拟机2,验证完成-登陆成功。 设置SSH免密登录详细过程 执行 ssh-keygen 连续按三次回车,生成公钥和私钥 公钥和私钥都保存在 /root/.ssh/ 目录下 可cd进去查看 分别为—id_rsa和id_rsa.pub 接下来我们就需要将生成的公钥复制给我们想要免密登录的虚拟机 执行 ssh-copy-id+虚拟机IP 输入yes和目标虚拟机的密码即可复制完成 在目标虚拟机的 /root/.ssh/ 目录下可以找到authorized_keys文件 cat authorized_keys 可以查看刚刚复制过来的公钥 可以与id_rsa.pub进行比较 相同!!! 测试一下 成功!!!!!!!!! 来源: https://blog.csdn.net/java_xinshou1/article/details/100539772

Jwt认识与攻击

假如想象 提交于 2019-11-29 06:17:28
今天看到2018强网杯的题目,因此总结一下。 Json Web Token Json Web Token简称jwt 那么怎么样可以让HTTP记住曾经发生的事情呢? 这里的选择可以很多:cookie,session,jwt 对于一般的cookie,如果我们的加密措施不当,很容易造成信息泄露,甚至信息伪造,这肯定不是我们期望的。 那么对于session呢? 对于session:客户端在服务端登陆成功之后,服务端会生成一个sessionID,返回给客户端,客户端将sessionID保存到cookie中,例如phpsessid,再次发起请求的时候,携带cookie中的sessionID到服务端,服务端会缓存该session(会话),当客户端请求到来的时候,服务端就知道是哪个用户的请求,并将处理的结果返回给客户端,完成通信。 但是这样的机制会存在一些问题: 1、session保存在服务端,当客户访问量增加时,服务端就需要存储大量的session会话,对服务器有很大的考验; 2、当服务端为集群时,用户登陆其中一台服务器,会将session保存到该服务器的内存中,但是当用户的访问到其他服务器时,会无法访问,通常采用缓存一致性技术来保证可以共享,或者采用第三方缓存来保存session,不方便。 所以这个时候就需要jwt了 在身份验证中,当用户使用他们的凭证成功登录时,JSON Web

批量实现ssh免密登录

纵然是瞬间 提交于 2019-11-29 06:11:37
本节索引 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里、腾讯那样,动不动就上亿的PV量,上万台服务器。我们通常还是工作在,几十台上百台服务器这样的环境,而使用ansible或者puppet这样的自动化运维工具则显得大材小用,并且最终的效果可能还不如几个小工具达到的效果好。像ssh免密登录在配合pssh这样的推送工具,在配合自动化配置脚本,可以说是即方便也使用。这一节将详细带大家以shell脚本的形式实现ssh免密登录进行百台机器的配置和管理。 ssh服务 随着明文通信协议telnet渐渐退出历史舞台,ssh这个作为安全的远程登录工具,更加受广大用户的青睐。SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix

公钥、私钥、签名、数字证书的关系

醉酒当歌 提交于 2019-11-29 04:45:28
公钥、私钥、签名、数字证书的关系(图文) 原文地址: https://www.jianshu.com/p/3c5212b47bec 图文解说 鲍勃有两把钥匙,一把是公钥,另一把是私钥。 图文解说 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。 图文解说 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果 图文解说 鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。 图文解说 鲍勃给苏珊回信,决定采用** "数字签名"**。他写完后先用Hash函数,生成信件的摘要(digest) 图文解说 然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。 图文解说 鲍勃将这个签名,附在信件下面,一起发给苏珊。 图文解说 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。 图文解说 苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。 图文解说 复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名"

Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件

旧巷老猫 提交于 2019-11-29 01:01:13
今天来点实际工作中的硬通货! 与计费系统打交道,少不了用到加密/解密实现。为了安全起见,通过非对称加密交换对称加密密钥更是不可或缺。那么需要通过什么载体传递非对称算法公钥/私钥信息?数字证书是公钥的载体,而密钥库可以包含公钥、私钥信息。 JKS 和 PKCS#12 都是比较常用的两种密钥库格式/标准。对于前者,搞Java开发,尤其是接触过HTTPS平台的朋友,并不陌生。 JKS 文件(通常为*.jks或*.keystore,扩展名无关)可以通过Java原生工具——KeyTool生成;而后者 PKCS#12 文件(通常为*.p12或*.pfx,意味个人信息交换文件),则是通过更为常用的OpenSSL工具产生。 当然,这两者之间是可以通过导入/导出的方式进行转换的!当然,这种转换需要通过KeyTool工具进行! 回归正题,计费同事遇到一个难题:合作方交给他们一个*.pfx文件,需要他们从中提取密钥,然后进行加密交互。其实,通过Java直接操作密钥库文件(或个人信息交换文件)对于一般Java开发人员来说,这都是个冷门。不接触数字安全,根本不知所云。况且,Java原生的密钥库文件格式为JKS,如何操作*.pfx文件?密钥库操作需要获知密钥库别名,*.pfx别名是什么?!接下来就解决这些问题! 方案: 通过keytool密钥库导入命令importkeystore,将密钥库格式由PKCS