和同学在 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 脚本, 欢迎各位来喷。
1
Yanni0507 2018-11-20 16:10:15 +08:00
你这里的 Base64,意义在哪里啊?
|
2
keller 2018-11-20 16:19:28 +08:00
既然都 RSA 了还 Base64 做什么
|
3
waterlaw OP @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 一下怎么弄? |
4
waterlaw OP @keller 我没想到 rsa.encrypt(message.encode(), pubkey) 后的字节这么没有规律, 这个 RSA 的数据换成人话( str )应该是什么?
|
5
likuku 2018-11-20 16:31:32 +08:00
GnuPG 双方交换 pub key,收发信息 先用 GPG 加密签名用 ASCII 格式输出,黏贴进聊天软件直接发嘛~
另外,还有 Telegram 的 端对端加密+阅后即焚 的 secret chat 模式。 |
6
hjc4869 2018-11-20 16:33:29 +08:00 via iPhone
binary 变 text 用 base64 没毛病。
一楼二楼如果愿意每次说话都发 binary 文件那不 base64 也行。 |
8
ZombieMisaka 2018-11-20 16:34:02 +08:00
单纯 rsa 多慢啊,加一个 aes 之类的对称加密吧,私钥给摘要值签名,证书给加密用的 key 加密
|
9
Bryan0Z 2018-11-20 16:36:38 +08:00 via Android
RSA 这种非对称加密很慢的,应该考虑 AES 等对称加密
|
10
waterlaw OP @ZombieMisaka en, 可以。
|
11
reechangs 2018-11-20 16:36:55 +08:00 via Android
应该是深信服之类的软件吧,Tim,微信通过代理不就好了?
|
13
waterlaw OP 我发现关于椭圆曲线加密的方式比较少, 也没有现成的方案, 不知道是不是还没大范围地推广?
|
14
wevsty 2018-11-20 16:51:36 +08:00
推广一下我写的小工具好了。
交换了密钥以后就可以进行安全的通信了,采用 Qt 开发,默认使用 AES-256-CFB 作为加密算法,可以把密钥保存为文件方便管理。 https://github.com/wevsty/en_message/releases |
15
waterlaw OP @wevsty 大佬啊, 这个 https://www.cryptopp.com/ 有点厉害, 这个项目维护多久了?
|
16
wevsty 2018-11-20 16:59:48 +08:00
@waterlaw
Crypto++这项目很早了,据悉第一个版本大约在 1995 年,不过这个项目一直是在维护的,也算是常用的加密库之一吧。 |
17
iwtbauh 2018-11-20 17:26:11 +08:00 via Android
为什么不直接用 openssl cli
|
18
whoami9894 2018-11-20 17:44:56 +08:00 via Android
我记得 PC 端 QQ 通讯协议不是还没被破解吗
|
20
37Y37 2018-11-20 17:52:15 +08:00
这个应该是很好的一个应用场景了
https://mp.weixin.qq.com/s/dpGqieL4WCmGdQh1AEG4Gw |
22
Yanni0507 2018-11-20 18:04:49 +08:00
@waterlaw
现成方案是有的,对称加密有 SM1,SM4,不对称加密有 SM2,摘要有 SM3 ; OpenSSL v1.1.1 里面是有 SM2,SM3,SM4 可以用的; RSA 算法核心简单,唯一,区别只在于密钥长度。ECC 在算法上相对复杂,曲线的选择和安全性比较是很麻烦的,所以很难统一意见,形成标准,所以推广比较慢,不过国内也有很多地方已经在应用了 |
23
t6attack 2018-11-20 18:07:13 +08:00
@37Y37 非对称加密的作用,可以用简单的语言描述下:
一个偷比特币钱包的木马。公钥包含在程序中,然后可以把加密的结果大摇大摆的发到公共网页上。公钥、加密密文全世界可见。但全世界只有作者能从中还原出钱包。 |
24
Yanni0507 2018-11-20 18:07:36 +08:00
@ZombieMisaka
按这个思路走下去最终可能会发现自己就是实现了一个 ssl 协议…… |
25
lululau 2018-11-20 18:10:45 +08:00
5L 正解,PGP/GPG,傻瓜一点的 Keybase
|
26
t6attack 2018-11-20 18:39:10 +08:00
php 写法
<?php //演示密钥 公钥 $pubKey = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDtSYK/cEu44hRH9FPYL+OkltL1 LULkj/2BHaVnq/oNpI2YSCBlhDYlbBTdtIe8hrxM/FzddvsmLYyqvfJkWPs7hDuu 9OMPRrtZDN0dELiCVhUl3B1i/HIdP39yseU4//zjiw85Bn6cX9SVfwBBl85uQjsT P5rto2YoA2TgAe1ujQIDAQAB -----END PUBLIC KEY-----"; //演示密钥 私钥 $privKey = "-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDtSYK/cEu44hRH9FPYL+OkltL1LULkj/2BHaVnq/oNpI2YSCBl hDYlbBTdtIe8hrxM/FzddvsmLYyqvfJkWPs7hDuu9OMPRrtZDN0dELiCVhUl3B1i /HIdP39yseU4//zjiw85Bn6cX9SVfwBBl85uQjsTP5rto2YoA2TgAe1ujQIDAQAB AoGAEcyV1i5iP7gVtWAKegj9lncJ1AJVJjf22ByVL7WiyCszw9yFMZg9R4lX91l3 ZRjmPxAfFy25oR+Bkb011XknPyaqL7LSjQABU2jpFoyclAy9rWPhnn5G8Xwvqz8V +i6wm5UP2yPTpCbxqwYo6/RgdkKfVQ4DLep3L7R0sbfgaTECQQD914iokrHAP014 S+r8WKV5GiZ121rOsiGvjuvvIHatLIzeXHpwL04T8QhCcvKDdypT3x4VFg3lVLrf OsmbYSp7AkEA703yYQbYSfTjrb7XYX2deLLQqMHN3DrkRy7WZWMAJ1edaNJlPkM5 v5vLUZfScuMa8ZvsI6IKJl5iVA1v8IoglwJBALqx8B/TrIoxxL+qTo0Egcec9RaP m60UFHRzkJFSdhaOApl0uNST5kACccm1kyof1fDT0+M8UkIOXFbcfPUbtMsCQDtb mkN27y9pDxCJxeLoxaaqtBcn+2glM3p0o7mCVQdtNB5MEdDf2/MrMcOLZSgaLRTB GFG+X8Ykoz82Fg4UNQECQGS/gykmpWt3zdRh4rgkgFZ3BBrVUeDIphvwvrvvihIi +FyROFWU9yQznu46djdeRlwaBhieFaN1nFsI5h3UMFo= -----END RSA PRIVATE KEY-----"; //测试数据 $data = "test data 123456789"; //公钥加密 openssl_public_encrypt($data, $encryptData, $pubKey); $encryptData = base64_encode($encryptData); echo $encryptData; echo "\n"; //私钥解密 $encryptData = base64_decode($encryptData); openssl_private_decrypt($encryptData, $decryptData, $privKey); echo $decryptData; ?> |
27
ytmsdy 2018-11-20 18:49:24 +08:00 via iPhone
base64 不是加密算法!
|
28
ETiV 2018-11-20 18:56:12 +08:00 via iPhone
问题的根源难道不是“用 TIM ”吗
聊 boss 不喜欢看到的内容的时候,别用 TIM 不就行了… |
29
sunny352787 2018-11-20 18:59:07 +08:00
...为啥不让 TIM 走 SS 代理呢?
|
30
Suzutan 2018-11-20 19:03:25 +08:00 via Android
要是能直接以 ntrqq 那种方式实现就好了,省的手动复制粘贴(
|
31
mmdsun 2018-11-20 19:10:01 +08:00 via Android
警告⚠。小心被查水表容易引起公安调查。因为文字加密
|
32
Koishi 2018-12-03 04:34:41 +08:00
@whoami9894 PCQQ 的协议一直都被摸得光光的... 随便去搜搜 PCQQ 机器人就能找到
不过 ECDH 的密钥协商可以防止中间人攻击,Boss 无法通过你发给 tx 的数据解出内容 |