rsa

HTTPS简介(二):非对称加密RSA

别等时光非礼了梦想. 提交于 2020-02-10 13:02:47
我们如何决定密钥是什么? 如果只有发送方和接收方知道密钥,对称密钥密码术是很安全的。在凯撒密码中,密钥是一个偏移值,这个偏移值决定每个字母应该偏移多少。在我们的例子中,我们使用的偏移值是 3,但是也能是 4 或者 12。 不过这么设计会有个问题:在用信鸽传递信息之前,如果 Alice 和 Bob 之前从没见过,他们没有安全的方式创建一个密钥。如果他们将密钥包含在信息之中,Mallory 将拦截信息并且发现密钥。后果就是:无论 Alice 和 Bob 发送的信息是否加密,Mallory 都能读取或者改变拦截到的信息。 这是一个典型的中间人攻击例子。避免它的唯一方法是改变之前的密码系统。 那么有没有这种方式,Alice 和 Bob 之前从没见过,Alice 想要给 Bob 传递一条信息,一开始Alice 先写一封空的信给Bob ,Bob发一个密钥给Alice。这个密钥要一个特点只能用来加密,对自己加密的文件都没办法解密,只有Bob 才能够解开。也就是说在密钥在传输的过程中即使被Mallory 截获了信鸽,Mallory知道了这个密钥,拿到了这个密钥也只是用来加密,他即使接下里截获到了Alice 用大家都拿到的密钥加密信息发给 Bob的信件,他也没办法解开密文。 这是另外一套密码系统。 他跟之前的有不一样的地方,第一就是他需要两次通讯过程,第二就是给出去的密钥只能用来加密无法用来解密。

一篇搞定RSA加密与SHA签名|与Java完全同步

烂漫一生 提交于 2020-02-08 09:24:00
基础知识 什么是RSA? 答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名。 RSA加密中padding? 答:padding即填充方式,由于RSA加密算法中要加密的明文是要比模数小的,padding就是通过一些填充方式来限制明文的长度。后面会详细介绍padding的几种模式以及分段加密。 加密和加签有什么区别? 答:加密:公钥放在客户端,并使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密; 加签:私钥放在客户端,并使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。 前者完全为了加密;后者主要是为了防恶意攻击,防止别人模拟我们的客户端对我们的服务器进行攻击,导致服务器瘫痪。 基本原理 RSA使用“密钥对”对数据进行加密解密,在加密解密前需要先生存公钥(Public Key)和私钥(Private Key)。 公钥(Public key): 用于加密数据. 用于公开, 一般存放在数据提供方, 例如iOS客户端。 私钥(Private key): 用于解密数据. 必须保密, 私钥泄露会造成安全问题。 iOS中的Security.framework提供了对RSA算法的支持,这种方式需要对密匙对进行处理, 根据public key生成证书, 通过private key生成p12格式的密匙

RSA加解密公式的同余变式说明

天涯浪子 提交于 2020-02-07 17:33:37
RSA算法中,加密明文用到公式: c = m^e mod n 解疑: c是cipher,密文; m是message,明文; e是加密指数; n是公钥。 该变式 在rsa算法中 等价于: c ≡ m^e mod n 解疑: “≡”是同余符号,mod是求余数,在python中表示为%。 两个整数a,b,若它们除以整数m所得的 余数相等 , 则称a,b对于模m同余 记作 a ≡ b (mod m) 推导: 因为c是m^e mod n的余数,所以c<n 因为c<n,所以 c= c mod n 即c和m^e关于n同余, c ≡ m^e mod n RSA解密公式: m= c^d mod n 同理可得: m ≡ C ^ d mod n 变为同余式后可以更好的扩展,例如数学来解决问题: 例如: N1CTF 2019-babayrsa https://www.anquanke.com/post/id/186525 作者用雅可比符号、勒让德符号、二次剩余等知识来破解得出明文 来源: CSDN 作者: Blus.King 链接: https://blog.csdn.net/q851579181q/article/details/104209483

RSA 加密 解密 公钥 私钥 签名 加签 验签

二次信任 提交于 2020-02-07 15:48:37
   http://blog.csdn.net/21aspnet/article/details/7249401#    http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html    http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html   三篇文章写得都非常好。   第一篇已经可以非常清楚细致的了解大概的在软件中应用加密和解密的过程或者说含义。   第二篇和第三篇可以非常详细的了解学习了RSA加密解密的具体过程,里面也设计到了很多高数的东西。数学底子好的可以深入了解一下。或者我再总结一下。   就是,有两个很大的质数相乘得到了一个很长的数。比如ABCDEFG七个字母是秘钥,我给你AB(CER文件)告诉你用这个加密,那么BC就是我的公钥,任何人都可以用这个东西加密,加密完之后发送给我,那么我的秘钥是根据RSA算出来的,也就是说只要你的加密过程没问题,那么我就可以用我的CDEFG私钥(pfx文件)来解密,解密完之后就是你要发给我的文件。如果解密失败了,那就是公钥或者私钥没对上,出了问题。   一句话就是,我有一把锁(公钥)一把钥匙(私钥),你把数据放到锁(公钥)里面传给我,我就用我的钥匙(私钥)来打开,再给我数据就好了。  

python RSA 加密与签名

给你一囗甜甜゛ 提交于 2020-02-07 15:43:48
PyCrypto装起来就简单多了,我是直接 sudo easy_install pycrypto 直接搞定的 先生成rsa的公私钥: 打开控制台,输入 openssl 再输入 genrsa -out private.pem 1024 来生成私钥 接着输入 rsa -in private.pem -pubout -out public.pem 来生成公钥 $ cat private.pem -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDKoeRzRVf8WoRSDYYqUzThpYCr90jfdFwTSXHJ526K8C6TEwdT UA+CFPQPRUg9jrYgFcown+J2myzO8BRLynD+XHb9ilLb49Mqk2CvDt/yK32lgHv3 QVx14Dpb6h8isjncSF965fxBxlHGbvPwnHkJ9etRIYdYV3QpYohFszH3wQIDAQAB AoGAFhKqkw/ztK6biWClw8iKkyX3LURjsMu5F/TBK3BFb2cYe7bv7lhjSBVGPL+c TfBU0IvvGXrhLXBb4jLu0w67Xhggwwfc86vlZ8eLcrmYVat7N6amiBmYsw20GViU

RSA签名和验签Util

我怕爱的太早我们不能终老 提交于 2020-02-07 15:39:30
目录 1、DigitalSign类 2、CryptException异常类 3、加签示例 4、验签示例 1、DigitalSign类 import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.KeyStore; import java.security.Signature; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateCrtKey; import java.security.interfaces.RSAPublicKey; import java.util.Enumeration; import

RSA 非对称加密原理

丶灬走出姿态 提交于 2020-02-07 10:41:05
RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P 、Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E < φ(N) E的取值必须是整数E 和 φ(N) 必须是互质数 5 计算私钥D E * D % φ(N) = 1 - 6 加密 C = M E mod N C:密文 M:明文 7 解密 M =C D mod N C:密文 M:明文 公钥=(E , N) 私钥=(D, N) 对外,我们只暴露公钥。 示例 1、找出质数 P 、Q P = 3 Q = 11 2、计算公共模数 N = P * Q = 3 * 11 = 33 N = 33 3、 欧拉函数 φ(N) = (P-1)(Q-1) = 2 * 10 = 20 φ(N) = 20 4、计算公钥E 1 < E < φ(N) 1 <E < 20 E 的取值范围 {3, 7, 9, 11, 13, 17, 19} E的取值必须是整数, E 和 φ(N) 必须是互质数 为了测试,我们取最小的值 E =3 3 和 φ(N) =20 互为质数,满足条件 5、计算私钥D E * D % φ(N) = 1 3 * D % 20 = 1 根据上面可计算出 D = 7 6、公钥加密 我们这里为了演示,就加密一个比较小的数字 M = 2 公式:C = ME mod

tls/ssl证书生成和格式转换

末鹿安然 提交于 2020-02-07 02:52:49
生成密钥: openssl genrsa -out privkey.pem 2048 生成csr申请文件: openssl req -sha256 -new -key privkey.pem -out pubkey.pem 生成自签名证书: openssl x509 -req -days 365 -in my.csr -signkey my.key -out my.crt 转换为pfx格式: openssl pkcs12 -export -out my.pfx -inkey my.key -in my.pem PKCS7 转 PEM: openssl pkcs7 -print_certs -in my.cer -out my.pem JKS 转 PKCS12: keytool -importkeystore -srckeystore my.jks -destkeystore my.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass passwordText -deststorepass passwordText -srcalias aliasText -destalias aliasText -srckeypass passwordText -destkeypass passwordText -noprompt

04 非对称加密

旧巷老猫 提交于 2020-02-06 12:41:01
非对称加密 1 简介 非对称加密算法 ,又称为 公开密钥加密算法 。它需要两个密钥,一个称为公开密钥 (public key),即公钥,另一个称为私有密钥 (private key),即私钥。因为加密和解密使用的是两个不同的密钥,所以这种算法称为非对称加密算法。 如果使用公钥对数据进行加密,只有用对应的私钥才能进行解密。 如果使用私钥对数据进行加密,只有用对应的公钥才能进行解密。 2 常见算法 2.1 RSA算法 RSA 加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA 是第一个能同时用于加密和数字签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准。 RSA 加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 2.2 ECC算法 ECC 也是一种非对称加密算法,主要优势是在某些情况下,它比其他的方法使用更小的密钥,比如 RSA 加密算法,提供相当的或更高等级的安全级别。不过一个缺点是加密和解密操作的实现比其他机制时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。 来源: CSDN 作者: JasBin2008 链接: https://blog.csdn.net/JasBin2008/article/details

配置 git公钥报错:unknown key type -rsa

六月ゝ 毕业季﹏ 提交于 2020-02-06 09:05:31
配置 git公钥的时候出现:ssh-keygen unknown key type -rsa 一个解决办法是去本地寻找.ssh文件,参考路径(C:\Users\Administrator\.ssh),把这个文件夹干掉,直接Delete。然后重新打开Git Bash,按照上面教程走就行了。 还有一种情况是你输入命令时,-C后面千万不能出现空格,要连在一起! 如果还是不行的话,再输入生成ssh秘钥命令的时候,去掉邮箱直接输入 ssh-keygen -t rsa 可以解决问题 最后我直接用:ssh-keygen -C"123@qq.com" 解决了,注意:-C后面没有空格 来源: CSDN 作者: 陈晨辰~ 链接: https://blog.csdn.net/weixin_38004638/article/details/104156389