• 请不要在回答技术问题时复制粘贴 AI 生成的内容
waterlaw
V2EX  ›  程序员

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

  •  1
     
  •   waterlaw ·
    water-law · Nov 20, 2018 · 6489 views
    This topic created in 2906 days ago, the information mentioned may be changed or developed.

    和同学在 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

    32 replies  •  2018-12-03 04:34:41 +08:00
    Yanni0507
    Yanni0507
    Nov 20, 2018
    1
    你这里的 Base64,意义在哪里啊?
    keller
    keller
    Nov 20, 2018
    2
    既然都 RSA 了还 Base64 做什么
    waterlaw
    waterlaw
    OP
    Nov 20, 2018
    3
    @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
    waterlaw
    OP
    Nov 20, 2018
    4
    @keller 我没想到 rsa.encrypt(message.encode(), pubkey) 后的字节这么没有规律, 这个 RSA 的数据换成人话( str )应该是什么?
    likuku
    likuku
    Nov 20, 2018
    5
    GnuPG 双方交换 pub key,收发信息 先用 GPG 加密签名用 ASCII 格式输出,黏贴进聊天软件直接发嘛~

    另外,还有 Telegram 的 端对端加密+阅后即焚 的 secret chat 模式。
    hjc4869
    hjc4869
    Nov 20, 2018 via iPhone
    6
    binary 变 text 用 base64 没毛病。
    一楼二楼如果愿意每次说话都发 binary 文件那不 base64 也行。
    waterlaw
    waterlaw
    OP
    Nov 20, 2018
    7
    @likuku 我朋友多是用 TIM, pub key 无论如何是必要的。
    d2D5Cc
    d2D5Cc
    Nov 20, 2018
    8
    单纯 rsa 多慢啊,加一个 aes 之类的对称加密吧,私钥给摘要值签名,证书给加密用的 key 加密
    Bryan0Z
    Bryan0Z
    Nov 20, 2018 via Android
    9
    RSA 这种非对称加密很慢的,应该考虑 AES 等对称加密
    waterlaw
    waterlaw
    OP
    Nov 20, 2018
    10
    @ZombieMisaka en, 可以。
    reechangs
    reechangs
    Nov 20, 2018 via Android
    11
    应该是深信服之类的软件吧,Tim,微信通过代理不就好了?
    likuku
    likuku
    Nov 20, 2018
    12
    @waterlaw 所以,直接用 GPG 不就好了,所需的功能都有(加解密,电子签名)。
    waterlaw
    waterlaw
    OP
    Nov 20, 2018
    13
    我发现关于椭圆曲线加密的方式比较少, 也没有现成的方案, 不知道是不是还没大范围地推广?
    wevsty
    wevsty
    Nov 20, 2018
    14
    推广一下我写的小工具好了。
    交换了密钥以后就可以进行安全的通信了,采用 Qt 开发,默认使用 AES-256-CFB 作为加密算法,可以把密钥保存为文件方便管理。
    https://github.com/wevsty/en_message/releases
    waterlaw
    waterlaw
    OP
    Nov 20, 2018
    15
    @wevsty 大佬啊, 这个 https://www.cryptopp.com/ 有点厉害, 这个项目维护多久了?
    wevsty
    wevsty
    Nov 20, 2018
    16
    @waterlaw
    Crypto++这项目很早了,据悉第一个版本大约在 1995 年,不过这个项目一直是在维护的,也算是常用的加密库之一吧。
    iwtbauh
    iwtbauh
    Nov 20, 2018 via Android
    17
    为什么不直接用 openssl cli
    whoami9894
    whoami9894
    Nov 20, 2018 via Android
    18
    我记得 PC 端 QQ 通讯协议不是还没被破解吗
    jorneyr
    jorneyr
    Nov 20, 2018
    19
    @Yanni0507 应该 RSA 加密的结果是字节数组, 很多是不可见字符, BASE64 把字节数组转为字符进行发送
    37Y37
    37Y37
    Nov 20, 2018
    20
    这个应该是很好的一个应用场景了
    https://mp.weixin.qq.com/s/dpGqieL4WCmGdQh1AEG4Gw
    Yanni0507
    Yanni0507
    Nov 20, 2018
    21
    @jorneyr 是哦,忘了这茬了,谢谢!
    Yanni0507
    Yanni0507
    Nov 20, 2018
    22
    @waterlaw
    现成方案是有的,对称加密有 SM1,SM4,不对称加密有 SM2,摘要有 SM3 ;
    OpenSSL v1.1.1 里面是有 SM2,SM3,SM4 可以用的;
    RSA 算法核心简单,唯一,区别只在于密钥长度。ECC 在算法上相对复杂,曲线的选择和安全性比较是很麻烦的,所以很难统一意见,形成标准,所以推广比较慢,不过国内也有很多地方已经在应用了
    t6attack
    t6attack
    Nov 20, 2018
    23
    @37Y37 非对称加密的作用,可以用简单的语言描述下:
    一个偷比特币钱包的木马。公钥包含在程序中,然后可以把加密的结果大摇大摆的发到公共网页上。公钥、加密密文全世界可见。但全世界只有作者能从中还原出钱包。
    Yanni0507
    Yanni0507
    Nov 20, 2018
    24
    @ZombieMisaka
    按这个思路走下去最终可能会发现自己就是实现了一个 ssl 协议……
    lululau
    lululau
    Nov 20, 2018
    25
    5L 正解,PGP/GPG,傻瓜一点的 Keybase
    t6attack
    t6attack
    Nov 20, 2018
    26
    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;
    ?>
    ytmsdy
    ytmsdy
    Nov 20, 2018 via iPhone
    27
    base64 不是加密算法!
    ETiV
    ETiV
    Nov 20, 2018 via iPhone
    28
    问题的根源难道不是“用 TIM ”吗

    聊 boss 不喜欢看到的内容的时候,别用 TIM 不就行了…
    sunny352787
    sunny352787
    Nov 20, 2018
    29
    ...为啥不让 TIM 走 SS 代理呢?
    Suzutan
    Suzutan
    Nov 20, 2018 via Android
    30
    要是能直接以 ntrqq 那种方式实现就好了,省的手动复制粘贴(
    mmdsun
    mmdsun
    Nov 20, 2018 via Android
    31
    警告⚠。小心被查水表容易引起公安调查。因为文字加密
    Koishi
    Koishi
    Dec 3, 2018
    32
    @whoami9894 PCQQ 的协议一直都被摸得光光的... 随便去搜搜 PCQQ 机器人就能找到
    不过 ECDH 的密钥协商可以防止中间人攻击,Boss 无法通过你发给 tx 的数据解出内容
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1293 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 21:13 · PVG 05:13 · LAX 13:13 · JFK 16:13
    ♥ Do have faith in what you're doing.