公钥加密

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

RSA算法原理(二)

只谈情不闲聊 提交于 2020-02-07 09:03:11
转载: http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 上一次,我介绍了一些 数论知识 。 有了这些知识,我们就可以看懂 RSA算法 。这是目前地球上最重要的加密算法。 六、密钥生成的步骤 我们通过一个例子,来理解RSA算法。假设 爱丽丝 要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢? 第一步,随机选择两个不相等的质数p和q。 爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。) 第二步,计算p和q的乘积n。 爱丽丝就把61和53相乘。   n = 61×53 = 3233 n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。 第三步,计算n的欧拉函数φ(n)。 根据公式:   φ(n) = (p-1)(q-1) 爱丽丝算出φ(3233)等于60×52,即3120。 第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。 爱丽丝就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。) 第五步,计算e对于φ(n)的模反元素d。 所谓 "模反元素" 就是指有一个整数d,可以使得ed被φ(n)除的余数为1。   ed ≡ 1

HTTPS原理01 -- SSL/TLS介绍

时光毁灭记忆、已成空白 提交于 2020-02-05 05:20:29
https=http+ssl 顾名思义,https是在http的基础上加上了SSL保护壳,信息的加密过程就是在SSL中完成的 SSL证书的定义:SSL证书是由专门的权威的数字证书颁发机构在验证一个域名的信息之后所发行的数字网络证书,它可以很好地维护网络信息的安全,防止这些信息被第三方所截取或是窃听。 ssl认证指的是客户端到服务器端的认证,它主要是提供对用户以及服务器的认证,对传送的数据进行加密和隐藏,它能够确保数据在传送过程当中不被改变,对于数据的加密性、数据的完整性有一定保障。 https ssl证书颁发后都有一个有效期。有时证书没过期都会出现无效的情况,那可能是电脑系统的时间不对会导致证书过期,因为https ssl证书颁发都有颁发日期和截止日期的。电脑系统当中的时间在证书有效时间之外,就有可能导致浏览器提示网站安全证书过期。 关于SSL证书原理,其实在一个网站部署了SSL证书之后,就相当于为这个网址配置两把密钥,一把叫做公钥,另一把叫做私钥。公钥的作用就是在用户将自己的信息留在这个网站时为这些信息加锁的钥匙,加了锁之后,这些信息就不能被轻易的读取,除非有专门的钥匙打开。而这把打开这个锁的钥匙,就是另一把密钥,也就是私钥。只有这把对应的私钥才可以打开公钥部下的锁,因此在这两把密钥的作用下,可以使客户的信息数据在网站中安全的传入并安全的浏览,不会被他人截取。 一、作用

数据加密方法及原理介绍

非 Y 不嫁゛ 提交于 2020-02-04 22:14:17
一、加密术语 1、加密 透过数学公式运算,使文件或数据模糊化,将容易识别的明文变成不可识 别的密文 用于秘密通讯或安全存放文件及数据 2、解密 为加密的反运算 将已模糊化的文件或数据还原,由密文还原出明文 3、密钥 是加密/解密运算过程中的一个参数,实际上就是一组随机的字符串 二、加密方法 1、对称式加密 使用同一把密钥对数据进行加密和解密 ,又称对称密钥 (Symmetric Key) 或(Secret Key) 进行加密通信前需要将密钥先传送给对方 ,或者双方通过某种密钥交换方法得到一个对 称密钥 缺点 :破解相对较容易 优点 :加密 /解密运算相对简单 ,耗用运算较少 ,加密 /解密效率高 常见算法 :40Bits ~128Bits DES,3DES,AES,RC2,RC4 等 2、非对称式加密 (也称为公钥 /私钥加密 ) 公钥加密主要用于身份认证和密钥交换 .公钥加密 ,也被称为 "不对称加密法 ",即加解密过 程需要两把不同的密钥 ,一把用来产生数字签名和加密数据 , 另一把用来验证数字签名和对 数据进行解密 . 使用公钥加密法 ,每个用户拥有一个密钥对 ,其中私钥仅为其个人所知 , 公钥则可分发给 任意需要与之进行加密通信的人 .例如 :A 想要发送加密信息给 B,则 A 需要用 B 的公钥加 密信息 ,之后只有 B 才能用他的私钥对该加密信息 进行解密 .

对称加密、单向加密和公钥加密的概念和联系

帅比萌擦擦* 提交于 2020-02-04 17:41:16
下文主要从加密算法的特征、常用加密算法和加密工具等方面,梳理和比较对称加密、单向加密和公钥加密的概念及其之间的联系。 对称加密 采用单钥密码的加密方法,同一个密钥可以同时用来加密和解密,这种加密方法称为对称加密,也称为单密钥加密。常用的单向加密算法: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合; 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高; AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256、512位密钥的加密; Blowfish 算法特征: 1、加密方和解密方使用同一个密钥; 2、加密解密的速度比较快,适合数据比较长时的使用; 3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦; 加密工具: openssl,它使用了libcrypto加密库、libssl库即TLS/SSL协议的实现库等。TLS/SSL是基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库。openssl官网。 gpg 单向散列加密 单向加密又称为不可逆加密算法,其密钥是由加密散列函数生成的。单向散列函数一般用于产生消息摘要,密钥加密等,常见的有: 1、MD5

公钥,私钥,数字签名,数字证书详解

左心房为你撑大大i 提交于 2020-02-04 13:37:46
鲍勃有两把钥匙,一把是公钥,另一把是私钥。 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。 鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。 鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。 然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。 鲍勃将这个签名,附在信件下面,一起发给苏珊。 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。 苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。 复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。 后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥

Git 最著名报错 “ERROR: Permission to XXX.git denied to user”解决方案

浪子不回头ぞ 提交于 2020-02-04 10:06:29
今天在github上pr项目时,报了一个错,后来百度了一下,折腾了好久,特意记下来。 报错如下:(自己忘了保留,借用一下网上的) 链接: https://www.jianshu.com/p/12badb7e6c10 ERROR: Permission to hbxn740150254/BestoneGitHub.git denied to Chenzuohehe. fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists. 看了解决办法之后,大致知道要重新生成一个SSH KEY了。 下面一步一步来: 生成SSH KEY //先进入本地ssh目录 AppledeiMac:~ Apple$ cd ~/.ssh //查看当前已有的密钥文件 AppledeiMac:.ssh Apple$ ls id_rsa id_rsa.pub known_hosts //生成密钥 AppledeiMac:.ssh Apple$ ssh-keygen -t rsa -C "iMac_personnal_publicKey" Generating public/private rsa key pair. Enter

什么是公钥和私钥

穿精又带淫゛_ 提交于 2020-02-04 07:49:18
公钥和私钥是现代密码体制中采用的密钥 一个公钥只能对应一个私钥,如果用其中一个密钥加密数据,就只能用另一个密钥来解密 每个通信方都有自己的公钥和私钥,公钥可以公开给其他人,私钥只有自己知道,要自己保存好 1.公钥加密 李四要给张三发送数据,步骤如下 张三把自己的公钥 Key张公 发给李四 李四拿到 Key张公 ,用 Key张公 将数据加密 李四拿到被加密的数据,用自己的私钥解密,拿到数据 2.公钥认证 李四要接收张三的文件,要验证这个文件是否真的是由张三发送过来的,步骤如下 张三用自己的私钥对文件进行加密 张三将被加密的文件发给李四 李四拿到被加密的文件,用 Key张公 解密文件,解密成功则说明:文件的确是由张三而不是别人的私钥加密的 来源: CSDN 作者: Tonited 链接: https://blog.csdn.net/weixin_43553694/article/details/104158209

公钥和私钥的区别[小白学java]

牧云@^-^@ 提交于 2020-02-03 22:03:23
一、公钥加密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。 我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用 数字2,就是我的私钥,来解密。这样我就可以保护数据了。 我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥, 只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。 二、私钥签名 如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知 道我的公钥是1,那么这种加密有什么用处呢? 但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他 解密看是不是c。他用我的公钥1解密,发现果然是c。 这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。 总结:公钥和私钥是成对的,它们互相解密。 公钥加密,私钥解密。