基于质数的加密算法难以被破解原理& RSA 公钥/私钥都能进行加密原理 简介篇[算法安全放心大胆用]

扩展思考
为什么jwt我们用的是私钥加密。
而某些数据传递用公钥加密。

RSA 加密科普

一 质数的特性

大家刚入门编程的时候,可能会接触到写一个代码实现求质数标。如果慢一点的代码实现就是从1一直除到自身,快一点的算法会对被除数做限制,减少一些没有比较的计算,如果还想进一步的快,那么就是运行时存储质数表。以缩小被除数目标。但是不可否认的是无论如何优化,大家实现的代码的核心仍然是依次尝试是否可以被其他质数整除。

这就引申出当前质数的特点。如果想要判断一个数字是否可以被整除,那么只能通过一个一个计算才能得到结果。同理,如果你使用两个非常大的质数进行了相乘,那么得到的这个数,如果让其他人反向求是哪几个质数想乘所得,那么也只能一个一个计算。

举个例子。
例如 我有两个质数。

100000000000000871 * 1000000000000001267 = x

那么你至少需要从 1 一直遍历到 100000000000000871 ,才能知道 x 的一个质数。
这就带来了计算机中的一个好处。我的加密成本远远低于破解成本,因为破解方除了不停的尝试,没有其他的方法可以对我的结果进行因式分解。(至少目前,基于质数的加密算法等价于现阶段因式分解难度)

二 RSA 加密简单介绍

如果是数学/计算机相关专业的同学,大学期间可能接触过一门课密码学,内容中就设计到了关于一些使用质数加密的算法,其中也包含我们这里直接引用 RSA 加密公式。

基于质数的加密算法难以被破解原理& RSA 公钥/私钥都能进行加密原理 简介篇

其实按照公式中的介绍和介绍一中的质数特点,就可以看出 rsa 的加密公式和解密公式是不一样的,并且用到的参数也是不一样的。
加密用到 e 和 n,但是解密用到的却是 d。 (这里感兴趣的同学,可以试一下,如果你有一个长度1000位的质数需要花多久才能计算得到结果)

RSA 公钥/私钥 都能加解密吗,jwt选择私钥加密的原因是什么。

用过 jwt 配合 rsa 的同学看到这可能联想到。jwt是用私钥进行了加密,而不是公钥,同时验证的时候用的是公钥。这不是和上面的反过来么。

其实不然,首先 jwt 的 rsa 应用场景和数据加密是不一样的。首先第一点就是jwt是可以base64看到明文的。

那么就引来以下问题了,jwt base64encode都是明文了,那jwt安全吗?那 jwt 中使用 rsa 的目的是什么呢?

这里说明答案:1 jwt是相对安全的,2 rsa 就是为了 jwt 的安全而配合使用的。

jwt相对安全的前提是不要把敏感信息存储在jwt,因为jwt本身是base64明文存储的。第二点是rsa在jwt的使用中是作为验证算法以保证jwt不被伪造的。 这种情况下,rsa 使用公钥并不像上面二所说的对加密数据进行了反解,而是进行了验证。私钥被令牌下发者保存着,公钥则可以发给各个集群由他们自己去验证(只是相对安全,可以选择在不泄露的前提下,每个集群各自存储公钥验证jwt是否被伪造,而不用用唯一集群去验证)。这个过程中,你用rsa公钥只做了一件事情,就是验证(only one)。

所以至此关于 质数/rsa/公钥加密/私钥加密+jwt 的组合简单介绍就结束了,感兴趣的同学也可以自己动手测试以下。


以下是gpt生成的相关介绍,感兴趣的同学也可以参考以下gpt的回复,我大致看了下gpt回复的没有什么问题。

RSA公钥和私钥都能加密,但它们在加密和解密过程中的作用有所不同,主要体现在以下几个方面:

加密与解密

  • 公钥加密,私钥解密:这是最常见的使用方式。当发送方想要安全地将信息发送给接收方时,可以使用接收方的公钥对信息进行加密。由于公钥是公开的,任何人都可以获取并使用它进行加密,但只有持有对应私钥的接收方才能解密该信息,从而保证了信息的安全性。
  • 私钥加密,公钥解密:这种方式通常用于数字签名。私钥是私有的,只有持有者才能使用它进行加密(即签名)。当私钥持有者使用私钥对信息(如文件、消息等)进行加密(签名)后,任何人都可以使用对应的公钥进行解密(验签),以验证该信息确实是由私钥持有者发出的,且信息在传输过程中未被篡改。

安全性与用途

  • 公钥加密的安全性:由于公钥是公开的,任何人都可以使用它进行加密,但只有私钥持有者才能解密,这保证了信息在传输过程中的安全性。即使信息被截获,没有私钥也无法解密,从而保护了信息的机密性。
  • 私钥加密的用途:私钥加密(签名)的主要目的是验证信息的来源和完整性。通过私钥签名,接收方可以确信信息是由私钥持有者发出的,并且信息在传输过程中未被篡改。这种机制在数字证书、软件分发、电子邮件安全等领域有着广泛的应用。

总结

RSA公钥和私钥都能加密,但它们的用途和安全性有所不同。公钥主要用于加密信息以保证传输过程中的安全性,而私钥则主要用于加密(签名)信息以验证其来源和完整性。这两种方式共同构成了RSA加密算法的核心,为网络通信和数据传输提供了强有力的安全保障。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 14

你这样发帖,我们就不得不这么对你了 分享:分享如何屏蔽不想看「TA」的文章用户

5个月前 评论
我们只希望世界和平 (楼主) 5个月前
我们只希望世界和平 (楼主) 5个月前
我们只希望世界和平 (楼主) 5个月前
liaosp 5个月前
我们只希望世界和平 (楼主) 5个月前
荒街! 5个月前
我们只希望世界和平 (楼主) 5个月前
wongvio (作者) 5个月前
我们只希望世界和平 (楼主) 5个月前
我们只希望世界和平 (楼主) 5个月前
荒街! 5个月前
我们只希望世界和平 (楼主) 5个月前
wongvio (作者) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
51
粉丝
16
喜欢
57
收藏
43
排名:519
访问:1.6 万
私信
所有博文
社区赞助商