写了一个 RSA + Base64 加密的程序,要不来试试?

2018-11-20 15:58:08 +08:00
 waterlaw

和同学在 TIM 上聊天, 他说 TIM 记录被 Boss 查水表了, 心想现在聊天软件都这么不安全了, 想到非对称加密, 又由于 TIM 文字的限制, 故使用 RSA + Base64 双重加密。 这里我有一个问题, 平时在阿里云使用 ssh 生成密钥对的时候, 在 ~/.ssh 目录下有一个 authorized_keys 的文件, 格式是

ssh-rsa xxxx xxx@DESKTOP

这个是有特定格式么? 如果我也采用类似文件来记录别人给我的公钥, 那该怎么解析(考虑换行空格等, 主要是不同编辑器的换行不大一样, 如一个公钥在记事本中是单行但用 Nodepad++ 打开却变为多行)。

使用方法:

rsatool encode "hello"

在 C:\Users[Her/His User Name].ssh 生成公钥, 把公钥拷给别人, 对方需在 .ssh 下新建 pub\YOUR_USER_NAME 目录, 将你给的秘钥复制到这里,/doge, 要是像 authorized_keys 那样管理文件就好了, 建个啥目录。

对方加密

rsatool encode "hello" -u YOUR_USER_NAME

你用私钥解密

rsatool decode '加密后的数据'

其实 V2 朋友喜欢使用 Base64 加密邮箱和微信号码的方式很简单就知道明文了, 使用 RSA 可以让对方以密文的方式传输数据, 当然明文只有你自己知道。

PS:

闲来无事,毫无技术含量, 主要用 pyinstaller 打包 python 脚本, 欢迎各位来喷。

github

5022 次点击
所在节点    程序员
32 条回复
Yanni0507
2018-11-20 16:10:15 +08:00
你这里的 Base64,意义在哪里啊?
keller
2018-11-20 16:19:28 +08:00
既然都 RSA 了还 Base64 做什么
waterlaw
2018-11-20 16:22:54 +08:00
@Base64 我用 Windows, 在 RSA 加密后, 数据是

```
python3 rsatool.py encode "as" -u xxx
```

```
b'v\x83\xe5\x9c\x94\n\xfc9jX\xa6\xdfG\x96]\x13\x9d\x06\x1d+Y(\x8eYPlG\x0b\xb0>\x96\x1a\xcb\x14x/v\r\xb8\xb3\x0b\x15J\x971\xf2\\\x07bI\x16{c\x8a\x
c6\xaaFFB;\xc6<\xcbE\xac\x99\x1dS\xf1\xab\xad\x9b\xc8\xb9\xc7\x18\x8e\xba\xaf\x95\x88\xcb\x1b\xd2\xf7\xec\x8cC\x83~\x13Zn3\x85s\xaat\xd9yT\x9eY\x
97|\xb0\x94|^4\xfc\xa6D$\xd4\xae\xfc\xe6\x02\x89\x19\x99;\x12\x8c\xea\x11\x88'

```
不给它 Base64 一下怎么弄?
waterlaw
2018-11-20 16:25:09 +08:00
@keller 我没想到 rsa.encrypt(message.encode(), pubkey) 后的字节这么没有规律, 这个 RSA 的数据换成人话( str )应该是什么?
likuku
2018-11-20 16:31:32 +08:00
GnuPG 双方交换 pub key,收发信息 先用 GPG 加密签名用 ASCII 格式输出,黏贴进聊天软件直接发嘛~

另外,还有 Telegram 的 端对端加密+阅后即焚 的 secret chat 模式。
hjc4869
2018-11-20 16:33:29 +08:00
binary 变 text 用 base64 没毛病。
一楼二楼如果愿意每次说话都发 binary 文件那不 base64 也行。
waterlaw
2018-11-20 16:33:53 +08:00
@likuku 我朋友多是用 TIM, pub key 无论如何是必要的。
ZombieMisaka
2018-11-20 16:34:02 +08:00
单纯 rsa 多慢啊,加一个 aes 之类的对称加密吧,私钥给摘要值签名,证书给加密用的 key 加密
Bryan0Z
2018-11-20 16:36:38 +08:00
RSA 这种非对称加密很慢的,应该考虑 AES 等对称加密
waterlaw
2018-11-20 16:36:44 +08:00
@ZombieMisaka en, 可以。
reechangs
2018-11-20 16:36:55 +08:00
应该是深信服之类的软件吧,Tim,微信通过代理不就好了?
likuku
2018-11-20 16:37:18 +08:00
@waterlaw 所以,直接用 GPG 不就好了,所需的功能都有(加解密,电子签名)。
waterlaw
2018-11-20 16:48:47 +08:00
我发现关于椭圆曲线加密的方式比较少, 也没有现成的方案, 不知道是不是还没大范围地推广?
wevsty
2018-11-20 16:51:36 +08:00
推广一下我写的小工具好了。
交换了密钥以后就可以进行安全的通信了,采用 Qt 开发,默认使用 AES-256-CFB 作为加密算法,可以把密钥保存为文件方便管理。
https://github.com/wevsty/en_message/releases
waterlaw
2018-11-20 16:55:36 +08:00
@wevsty 大佬啊, 这个 https://www.cryptopp.com/ 有点厉害, 这个项目维护多久了?
wevsty
2018-11-20 16:59:48 +08:00
@waterlaw
Crypto++这项目很早了,据悉第一个版本大约在 1995 年,不过这个项目一直是在维护的,也算是常用的加密库之一吧。
iwtbauh
2018-11-20 17:26:11 +08:00
为什么不直接用 openssl cli
whoami9894
2018-11-20 17:44:56 +08:00
我记得 PC 端 QQ 通讯协议不是还没被破解吗
jorneyr
2018-11-20 17:47:57 +08:00
@Yanni0507 应该 RSA 加密的结果是字节数组, 很多是不可见字符, BASE64 把字节数组转为字符进行发送
37Y37
2018-11-20 17:52:15 +08:00
这个应该是很好的一个应用场景了
https://mp.weixin.qq.com/s/dpGqieL4WCmGdQh1AEG4Gw

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

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

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

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

© 2021 V2EX