这个操作怎么实现:使用 rsa 私钥加密数据,然后 rsa 公钥解密(并不是数字签名认证,最好是 golang 实现)

2019-05-10 22:08:13 +08:00
 z0ne
4449 次点击
所在节点    问与答
54 条回复
z0ne
2019-05-10 22:11:05 +08:00
我对算法什么的不熟,好像是无法使用 rsa 公钥进行解密的(只能加密)
那么我要是想达到这个操作,怎么实现比较合适呢?
allenforrest
2019-05-10 22:16:24 +08:00
何出此言?
z0ne
2019-05-10 22:19:14 +08:00
@allenforrest
我是想实现如下功能:
1. 我用“私钥”加密一段数据,发送给用户,当成程序的认证码
2. 程序中保存着“公钥”,这个”公钥“只能用来解密这段数据,解密后进行判断认证是否合法
期间这段认证码没有私钥是无法伪造生成的

用 rsa 算法能否实现呢?
jiafaner
2019-05-10 22:19:22 +08:00
反了吧?
ThirdFlame
2019-05-10 22:20:32 +08:00
所谓的加密和解密只是相对的。
数字签名认证,就是你使用你的私钥加密哈希值,传送给对方。 对方拿你的公钥解密后,得到哈希值,与传送内容的哈希值值进行比较。确定是不是你发送的。 你说有没有用到公钥解密。
z0ne
2019-05-10 22:20:49 +08:00
@jiafaner 需求没反,但代码实现可能反了
z0ne
2019-05-10 22:21:54 +08:00
@ThirdFlame
我是 想不止达到数字签名认证对比的功能,而是能读取解密出这个“签名”的数据~
luban
2019-05-10 22:22:07 +08:00
rsa 是可以公钥加密私钥解密,也可以私钥加密公钥解密
luban
2019-05-10 22:22:48 +08:00
java 网上有很多例子,golang 没用过
kalista
2019-05-10 22:52:38 +08:00
网上挺多 go 调用 rsa 的,官方有 crypto 库
ThirdFlame
2019-05-10 23:15:03 +08:00
@z0ne 大哥 你把哈希值 当做明文,这不就是 私钥加密,公钥解密么
zealot0630
2019-05-10 23:24:58 +08:00
公钥是“公开的”,你这种方法毫无安全可言。

公开并不是说你不泄漏就不公开了,而是整个加密体系都围着公钥是公开的这个假设展开的,举例来说,公钥不会放在 sensitive memory 里面,比如你的程序 core dump 了,那么私钥是不会出现在 core dump 中,但是公钥就会。在使用公钥时候,不会考虑各种攻击,比如 time attack,等等因素,都会导致你的公钥非常容易泄露。

总而言之,不要这样做!
zealot0630
2019-05-10 23:27:53 +08:00
看了你后面的描述,你需要的是签名功能,证明代码与数据的来源可靠,这是 RSA 的标准用法,google rsa sign 就可以了。加密在这里毫无意义。
zealot0630
2019-05-10 23:30:11 +08:00
如果你不想让你的程序明文在互联网上传输,请使用 TLS
AlphaTr
2019-05-10 23:34:10 +08:00
你这功能叫签名和验签吧……
wangsongyan
2019-05-10 23:37:20 +08:00
license ?
z0ne
2019-05-11 00:28:51 +08:00
@zealot0630
不是数字证书签名
我的意思是:使用私玥加密,然后可以且只能用公玥解密,那么我只需要发布公玥和加密后的数据(公玥可以解密这个数据,而不是仅仅只是校验),而且这部分的数据都不可篡改
z0ne
2019-05-11 00:30:14 +08:00
@zealot0630
好像 RSA 只能“单向”的加密,也就是使用公玥解密,然后只能用私玥解开,但是我的需求是反的,想用私玥加密,只能用公玥解开
ahhui
2019-05-11 00:35:34 +08:00
@z0ne 你需要两对公 /私钥
z0ne
2019-05-11 00:43:22 +08:00
@ahhui 您的意思是创建两个私钥,然后再生成两个公钥是吗?那怎么利用呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/563006

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX