<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用這個,你發(fā)的消息就無法被監(jiān)控了

          共 4872字,需瀏覽 10分鐘

           ·

          2022-08-01 09:44

          我覺得每一個人都應(yīng)該學(xué)會使用 RSA,因?yàn)橹挥性诩用艿氖澜缋?,我們的隱私才能真正被保護(hù)。今天就來分享一下如何用 Python 來應(yīng)用 RSA。

          先說個場景,你是 A,要發(fā)一個重要的消息給 B,但是通過任何聊天 APP 都是不安全的,可能被監(jiān)控,也可能被記錄,因此你需要對消息加密。

          怎么加密安全,那就是用 RSA 的公鑰加密,私鑰解密,公鑰可以公開,私鑰不公開。

          第一步:密鑰生成并交換公鑰

          pip install rsa

          A 生成一對 RSA 密鑰,叫公鑰 A,私鑰 A

          from rsa import newkeys
          public_key_a, private_key_a = newkeys(2048, poolsize=8)
          with open("public_key_a.pem""wb"as f:
              f.write(public_key_a.save_pkcs1(format="PEM"))
          with open("private_key_a.pem""wb"as f:
              f.write(private_key_a.save_pkcs1(format="PEM"))

          public_key_a.pem 的內(nèi)容如下:

          -----BEGIN RSA PUBLIC KEY-----
          MIIBCgKCAQEArAdHKqjnVzeMt+4DpmQvoQsaKokL05+DS6Kykj1KiOmVWLreIUfP
          fvedIRykBFNODwHQHGtWGPeaMYs86+9zdIRMtqC0TlXQyj74aP9CTAV43SSA65kY
          EwQVJh3QBmrQok8lEljhN/QbiWrw4xG+rYP6BgsHFM3tuHb6oIkuhL6r+A3hj2ep
          DY3jxn0ZPNSN10i9tTC/KXqKGnJrOAEQ6nNL/mAnFLwiuDQrEBmXfnK5bpw7hjDy
          pJ0Cs3JM74+OTxo76Tbay1nWGGipLSXzRCXQW2+AD4Q6bFq6nuGic9gQLvQa11B7
          XZVhVvVTxrezAOMYL3FOFXfIFqOB8HvTEQIDAQAB
          -----END RSA PUBLIC KEY-----

          B 生成一對 RSA 密鑰,叫公鑰 B,私鑰 B。

          from rsa import newkeys
          public_key_b, private_key_b = newkeys(2048, poolsize=8)
          with open("public_key_b.pem""wb"as f:
              f.write(public_key_b.save_pkcs1(format="PEM"))
          with open("private_key_b.pem""wb"as f:
              f.write(private_key_b.save_pkcs1(format="PEM"))

          A 把文件 public_key_a.pem 發(fā)送給 B,B 也把 public_key_b.pem 發(fā)送給 A,這樣就完成了密鑰的交換。后面 A 要和 B 通信,就用 B 的公鑰加密消息,B 用自己的私鑰解密,就可以得到 A 發(fā)送的消息,反之亦然。

          第二步: 加密

          比如說 A 現(xiàn)在有了 B 的公鑰,要對消息進(jìn)行加密的時候,先載入 B 的公鑰:

          import base64
          from rsa import PublicKey, PrivateKey, encrypt, decrypt,

          public_key_b_file = Path("./public_key_b.pem")
          public_key_b = PublicKey.load_pkcs1(public_key_b_file.read_bytes(), format="PEM")
          print(public_key_b)

          可以得到這樣的輸出

          PublicKey(21831899084185660921840174683452830587321319689015722246782364711292417600371532112177905506057539367671580668438126704427894857192387484162751992715040787885971624030995019473104987454304337735143558728644817397903950824366991556950207676816787133824709081376405184001095218083813620277536858163575686850410455092011765877504499366336792653732470469604531683754075419135479867324338689671063858801578735120084016574895760616498188773853425143006311923355945139917528996017456427975883103933944819388497917519791324247040364723098266886847457872058619189743684510784904551008906591879274280765194272666652349889346853, 65537)

          然后把明文先按照 utf-8 編碼成字節(jié),在加密,然后轉(zhuǎn) base64,就可以發(fā)送給 B 了。


          import base64
          from rsa import PublicKey, PrivateKey, encrypt, decrypt

          if __name__ == "__main__":
              public_key_b_file = Path("./public_key_b.pem")
              public_key_b = PublicKey.load_pkcs1(public_key_b_file.read_bytes(), format="PEM")
              # print(public_key_b)
              orgin_message = "取款的密碼是 123321"
              encrypt_message = base64.b64encode(
                  encrypt(orgin_message.encode("utf-8"), public_key_b)
              )
              print(encrypt_message.decode())

          密文就是:

          mlVecdANZxsvXPivECRvNpoJr+2NxElM84moDr5N3FoKdxvubcHcteA4AW7UyHMj2PD96jaiQiD6hWX6M4dFePi05IE6k6JdAVXWSq5fTbZsiqBggidrcDL3azAaW5e4jQ6md6Bem1XcVAo2u1meIl+rXPKLUECu9R4tkgjtUTgUZpZ7rObl18Sz51A86ZxxRIEwkmG+TYJUPa27CyMPgD0zqlrKqh4SjIRZ1e3SmWxyet+3XFLE2b1XJwMhPUOFsJEO6qs204WtvpOYH0nGQorYsJe+ReIx/W0zZyK4zE+En9xW7fBByYNrseonh3sm6ALG6cRpZV/Odd2vmRUtOQ==

          而且同一個明文每次加密成密文的結(jié)果都不一樣,暴力破解也幾乎不可能:

          第二步: 解密

          解密就是用自己的密鑰解密,也要先載入自己的私鑰,與 public_key_b 是一對。


          import base64
          from rsa import PublicKey, PrivateKey, encrypt, decrypt

          if __name__ == "__main__":

              encrypted_msg = "mlVecdANZxsvXPivECRvNpoJr+2NxElM84moDr5N3FoKdxvubcHcteA4AW7UyHMj2PD96jaiQiD6hWX6M4dFePi05IE6k6JdAVXWSq5fTbZsiqBggidrcDL3azAaW5e4jQ6md6Bem1XcVAo2u1meIl+rXPKLUECu9R4tkgjtUTgUZpZ7rObl18Sz51A86ZxxRIEwkmG+TYJUPa27CyMPgD0zqlrKqh4SjIRZ1e3SmWxyet+3XFLE2b1XJwMhPUOFsJEO6qs204WtvpOYH0nGQorYsJe+ReIx/W0zZyK4zE+En9xW7fBByYNrseonh3sm6ALG6cRpZV/Odd2vmRUtOQ=="
              private_key_b_file = Path("./private_key_b.pem")
              private_key_b = PrivateKey.load_pkcs1(private_key_b_file.read_bytes(), format="PEM")
              origin_message = decrypt(base64.b64decode(encrypted_msg.encode()), private_key_b)
              print(origin_message.decode("utf-8"))
              # 取款的密碼是 123321

          只要 B 的私鑰沒有泄漏,那就只有 B 才能解開這段密文,所以非常安全。

          最后的話

          本文分享了在 Python 中如何使用 RSA 加解密,你可以基于此做一個與加密通信程序,希望對你有所幫助。

          推薦:

          一文搞懂 RSA 算法

          用 Python 來實(shí)現(xiàn) RSA 加解密


          瀏覽 40
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青青草免费在线 | 操操操操骚逼 | 日韩操逼片 | 日本大乳在线观看 | 日日碰狠狠添 |