公钥加密

对称加密与非对称加密和HTTPS

独自空忆成欢 提交于 2019-12-01 16:25:55
为什么需要加密,因为HTTP是明文传输,不安全。 对称加密 浏览器和服务器使用同一个密钥进行加密和解密。没有该密钥不能获取到传输的内容。看似是正确的没有错误。但是怎么保证该密钥能安全的让双方知道呢,服务器生成密钥发送给浏览器的过程中是有可能被截获该密钥的。有的人可能会想,如果浏览器一开始就有该密码就可以了,但是你想想让浏览器去保存所有HTTPS网站的密钥?这不现实吧。 非对称加密 浏览器和服务器同时拥有公钥和私钥,公钥用来加密,私钥用来解密。公钥是可以在网络中传输的。 过程是这样的: 浏览器拥有公钥A和私钥A',服务器拥有公钥B和私钥B' 浏览器向服务器发送请求时,服务器明文传输公钥B给浏览器。 浏览器用公钥B进行加密发送给服务器,服务器收到后用私钥B'进行解密,因为只有服务器有该密钥B',所以是安全的。 同理,服务器向浏览器传输的道路上用浏览器的公钥加密,浏览器收到后用浏览器的私钥进行解密。 这样两条路的安全都可以保证是安全的了(其实是不安全的) 先抛开非对称加密的不安全性不说来谈谈为什么HTTPS不是用的这种加密? 很简单,这种方式太过于繁琐和耗时,效率不高。而对称加密算法则比这快的多,那么我们可不可以使用两者的结合呢? 非对称加密+对称加密 HTTPS真正采用的是这种加密方式。 大致的过程就是使用非对称加密的方式传送密钥,那么该密钥就是双方就安全的得到了

RSA加密、解密、签名、验签的原理及方法

喜夏-厌秋 提交于 2019-12-01 13:27:19
一、RSA加密简介   RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。    二、RSA加密、签名区别   加密和签名都是为了安全性考虑,但略有不同。常有人问加密和签名是用私钥还是公钥?其实都是对加密和签名的作用有所混淆。简单的说,加密是为了防止信息被泄露,而签名是为了防止信息被篡改。这里举2个例子说明。 第一个场景 :战场上,B要给A传递一条消息,内容为某一指令。 RSA的加密过程如下: (1)A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。 (2)A传递自己的公钥给B,B用A的公钥对消息进行加密。 (3)A接收到B加密的消息,利用A自己的私钥对消息进行解密。   在这个过程中,只有2次传递过程,第一次是A传递公钥给B,第二次是B传递加密消息给A,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行解密,防止了消息内容的泄露。 第二个场景: A收到B发的消息后,需要进行回复“收到”。 RSA签名的过程如下: (1)A生成一对密钥(公钥和私钥),私钥不公开,A自己保留

C# 网络加密与解密

天涯浪子 提交于 2019-12-01 13:20:29
     数据在网络传输过程中的保密性是网络安全中重点要考虑的问题之一。由于通过网络传递数据是在不安全的信道上进行传输的,因此通信双方要想确保任何可能正在侦听的人无法理解通信的内容,而且希望确保接收方接收的信息没有在传输期间被任何人修改,最好的办法就是在传输数据前对数据进行加密,接收方接收到加密的数据后再进行解密处理,从而保证数据的安全性。   在.NET 库的System.Security.Cryptography 命名空间中,包含多种加密数据的类,涉及多种加密算法。加密方法主要分为两大类:对称加密和不对称加密。 1 对称加密   对称加密也称为私钥加密,采用私钥算法,加密和解密数据使用同一个密钥。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保证该密钥不能被攻击者获取,否则就失去了加密的意义。   私钥算法以块为单位加密数据,一次加密一个数据块。因此对称加密支持数据流,是加密流数据的理想方式。   .NET 类库使用的私钥算法有RC2、DES、TripleDES 和Rijndael。这些算法通过加密将n字节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。由于n很小(对于RC2、DES 和TripleDES 算法,n 的值为8 字节、16 字节或24 字节,默认值为16字节;对于Rijndael 算法,n 的值为32 字节)

使用ssh-keygen生成私钥和公钥

穿精又带淫゛_ 提交于 2019-12-01 12:26:18
1.使用ssh-keygen生成私钥和公钥 命令如下: ssh-keygen -t rsa 例子: fdipzone@ubuntu:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/fdipzone/.ssh/id_rsa): 这里输入要生成的文件名 Enter passphrase (empty for no passphrase): 这里输入密码 Enter same passphrase again: 这里重复输入密码 Your identification has been saved in /home/fdipzone/.ssh/id_rsa. Your public key has been saved in /home/fdipzone/.ssh/id_rsa.pub. The key fingerprint is: f2:76:c3:6b:26:10:14:fc:43:e0:0c:4d:51:c9:a2:b0 fdipzone@ubuntu The key's randomart image is: +--[ RSA 2048]----+ | .+=*.. | | . += + | | o oo+ | | E

PHP RSA签名

喜夏-厌秋 提交于 2019-12-01 11:45:26
签名算法: Setp.1 确定待签名参数 在请求参数列表中,除去sign参数外,其他需要使用到的参数皆是要签名的参数。 在通知返回参数列表中,除去sign参数外,凡是通知返回回来的参数皆是要签名的参数。 Setp.2 对参数进行排序 对于待签名的所有参数,需要根据参数名首字符字典顺序(ascii值大小)排序,若遇到相同首字符,则判断第二个字符,以此类推。 Setp.3 生成待签名字符串 将排序后的待签名参数以“&“符号拼接, 形如:“参数名1=参数值1&参数名2=参数值2&….&参数名N=参数值N”。 Setp.4 生成签名/验证签名 生成签名:把待签名字符串与商户的私钥一同放入RSA的签名函数中进行签名运算,从而得到签名结果字符串(sign值)。 验证签名:把待签名字符串、平台提供的公钥、通知返回参数中的参数sign值三者一同放入RSA的签名函数中进行签名运算,来判断签名是否验证通过。 1、公钥、私钥格式化(加上前后戳、每64位进行换行) /**********************************私钥格式化*************************************/ 1 function formatPriKey($priKey) { 2 $fKey = "-----BEGIN PRIVATE KEY-----\n"; 3 $len = strlen(

比特币里的计算机知识

[亡魂溺海] 提交于 2019-12-01 10:24:56
比特币里的计算机知识 一、人民币、支付宝和比特币有什么区别 (1)人民币 大家都很清楚,人民币就是中国人民银行发行的货币。这些货币流通到市场中,每个人有了钱以后可以去购买各种商品和服务,人民币就会从一个人手里转到另外一个人手里。钱流通到市场中后,具体某一个编号的纸币在某个特定的时候在谁身上是不确定的,国家也不关心。纸币在实际中是很难复制的,复制成本高、风险也很大。 (2)支付宝 支付宝,当然包括微信,里面的余额说白了就是一个数据,存储在支付宝和微信公司的服务器上。同人民币不同,数据的复制、修改是不需要成本的。这些电子货币在市场上是怎样运行的?以支付宝为例,首先你要申请一个支付宝账户,然后关联一张银行卡,这样你就可以把支付宝中的钱转出到银行卡或者将银行卡的钱充值到支付宝中。当你消费时利用支付宝付款或者营收通过支付宝收款时,对方也必须要有一个支付宝账号,这样付多少钱实际上是从你的支付宝账号上扣款,给对方支付宝账户加钱。 这其中涉及到两个方面的数据变动。一是和银行相关:支付宝在各大银行都开了一个账号,个人在用银行卡往自己的支付宝账号充值或者提现,实际上是银行中支付宝那个大账号和你的账号之间的存款变动。当然支付宝公司会将你支付宝账号上的数值进行相应的变动。二是和银行无关,支付宝内部数据转换。当你和对方之间一个用支付宝进行付钱、另一个进行收钱,这个时候就跟银行没有关系

加密算法理解总结

南笙酒味 提交于 2019-12-01 08:04:43
对称加密算法 加密和解密使用同一个密钥 非对称加密 简介:非对称性加密,也叫公钥加密,加密解密的过程使用不同的密钥。 密钥分为公钥与私钥: - 公钥:从私钥中提取产生;可公开给所有人;pubkey - 私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key; 特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;私钥加密的数据只能使用与之配对的公钥解密。而私钥一般只有一个,而公钥可以有多个主机同时拥有。 来源: https://www.cnblogs.com/zidonghuaqianxing/p/11671857.html

javaweb项目使用RSA算法

陌路散爱 提交于 2019-12-01 07:42:59
1. RSA 算法介绍 RSA 算法是一种非对称算法,即是加密的密码和解密的密码是不一致的。因此对 RSA 的加密和加密的密码分为公钥和私钥。根据 RSA 的算法介绍,只要密钥的长度足够长,现在没有任何方法可以破解。而且这个算法的专利已经在 2000 年 9 月 21 日失效,因此应该是可以任意使用的。 密钥获取: 选用 PKCS#8 生成密钥,选 PKCS#1 可能会导致解密失败 http://web.chacuo.net/netrsakeypair 1. javaweb 使用 RSA 1.1. 前端加密 要在前端加密密码,就要使用到jsencrypt 的 js 1.1.1. jsencrypt 下载 官网: http://travistidwell.com/jsencrypt/ github: https://github.com/travist/jsencrypt/releases 在 bin 目录下面可以找到相关 js : 1.1.2. 代码示例 1 //RSA加密 2 function encryptRequest(reqUrl, data) { 3 var publicKey = "****"; 4 var encrypt = new JSEncrypt(); 5 encrypt.setPublicKey(publicKey); 6 // ajax请求发送的数据对象 7

RSA公钥私钥原理及作用

隐身守侯 提交于 2019-11-30 22:33:23
RSA算法广泛应用与加密与认证两个领域 1.加密(保证数据安全性) 使用公钥加密,需使用私钥解密。 这种广泛应用在保证数据的安全性的方面,用户将自己的公钥广播出去,所有人给该用户发数据时使用该公钥加密,但是只有该用户可以使用自己的私钥解密,保证了数据的安全性。 2.认证(用于身份判断) 使用私钥签名,需使用公钥验证签名。 用户同样将自己的公钥广播出去,给别人发送数据时,使用私钥加密,在这里,我们更乐意称它为签名,然后别人用公钥验证签名,如果解密成功,则可以判断对方的身份。 总结:(摘抄自:https://www.cnblogs.com/scofi/p/6617394.html)  公钥与私钥使用场景:  (1)私钥用来进行解密和签名,是给自己用的。  (2)公钥由本人公开,用于加密和验证签名,是给别人用的。 (3)当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,可以保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。 参考资料:https://www.cnblogs.com/scofi/p/6617394.html ———————————————— 版权声明:本文为CSDN博主「lijinshanba」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https:/

私钥和公钥的简单理解

我的梦境 提交于 2019-11-30 21:42:56
对称(共享秘钥) 非对称(公开秘钥) 数字签名与加密: 加密体系:公钥加密、私钥解密 签名体系:私钥加密、公钥解密 数据p-->> A {A的私钥(签名)->B的公钥(加密)} -->> B {B的私钥(解密)->A的公钥(认证)} -->>p http://www.youdzone.com/signature.html 来源: https://www.cnblogs.com/boomohg/p/11641466.html