附:

RSA.exe

#针对Linux !/usr/bin/env python3
import argparse
import base64
import os
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.backends import default_backend

# ---------- 生成密钥对 ----------
def gen_keys(name_prefix="my_rsa", bits=2048):
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=bits,
        backend=default_backend()
    )
    public_key = private_key.public_key()

    # 私钥 PEM
    pem_private = private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption()
    )
    # 公钥 PEM
    pem_public = public_key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    )

    with open(f"{name_prefix}_private.pem", "wb") as f:
        f.write(pem_private)
    with open(f"{name_prefix}_public.pem", "wb") as f:
        f.write(pem_public)
    print(f"已生成 {name_prefix}_private.pem 与 {name_prefix}_public.pem")

# ---------- 辅助读密钥 ----------
def load_public_key(path):
    with open(path, "rb") as f:
        return serialization.load_pem_public_key(f.read(), backend=default_backend())

def load_private_key(path):
    with open(path, "rb") as f:
        return serialization.load_pem_private_key(f.read(), password=None, backend=default_backend())

# ---------- 加密 ----------
def encrypt_text(text: str, pub_key_path: str) -> str:
    pub_key = load_public_key(pub_key_path)
    cipher = pub_key.encrypt(
        text.encode("utf-8"),
        padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
    )
    return base64.b64encode(cipher).decode("utf-8")

# ---------- 解密 ----------
def decrypt_text(b64_cipher: str, priv_key_path: str) -> str:
    priv_key = load_private_key(priv_key_path)
    cipher = base64.b64decode(b64_cipher.encode("utf-8"))
    plain = priv_key.decrypt(
        cipher,
        padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
    )
    return plain.decode("utf-8")

# ---------- 帮助文字 ----------
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="RSA 加密/解密小工具")
    sub = parser.add_subparsers(dest="action")

    # 生成密钥
    g = sub.add_parser("gen", help="生成密钥对")
    g.add_argument("-p", "--prefix", default="my_rsa", help="文件名前缀")
    g.add_argument("-b", "--bits", type=int, default=2048, help="密钥长度")

    # 加密
    e = sub.add_parser("enc", help="加密文本")
    e.add_argument("-t", "--text", required=True, help="要加密的文本")
    e.add_argument("-k", "--pubkey", required=True, help="公钥文件路径")

    # 解密
    d = sub.add_parser("dec", help="解密文本")
    d.add_argument("-c", "--cipher", required=True, help="base64 密文")
    d.add_argument("-k", "--privkey", required=True, help="私钥文件路径")

    args = parser.parse_args()

    if args.action == "gen":
        gen_keys(args.prefix, args.bits)
    elif args.action == "enc":
        print(encrypt_text(args.text, args.pubkey))
    elif args.action == "dec":
        print(decrypt_text(args.cipher, args.privkey))
    else:
        parser.print_help()

#                      d*##$.
# zP"""""$e.           $"    $o
#4$       '$          $"      $
#'$        '$        J$       $F
# 'b        $k       $>       $
#  $k        $r     J$       d$
#  '$         $     $"       $~
#   '$        "$   '$E       $
#    $         $L   $"      $F ...
#     $.       4B   $      $$$*"""*b
#     '$        $.  $$     $$      $F
#      "$       R$  $F     $"      $
#       $k      ?$ u*     dF      .$
#       ^$.      $$"     z$      u$$$$e
#        #$b             $E.dW@e$"    ?$
#         #$           .o$$# d$$$$c    ?F
#          $      .d$$#" . zo$>   #$r .uF
#          $L .u$*"      $&$$$k   .$$d$$F
#           $$"            ""^"$$$P"$P9$
#          JP              .o$$$$u:$P $$
#          $          ..ue$"      ""  $"
#         d$          $F              $
#         $$     ....udE             4B
#          #$    """"` $r            @$
#           ^$L        '$            $F
#             RN        4N           $
#              *$b                  d$
#               $$k                 $F
#               $$b                $F
#                 $""               $F
#                 '$                $
#                  $L               $
#                  '$               $
#                   $               $
# 永无BUG!!!!

提示:需要先安装cryptography!!需要先安装cryptography!!需要先安装cryptography!!

如果不安装,程序会直接报错退出



我最近又做了个加密工具,是RSA的加密工具,2048bit的加密。

我觉得挺好用的,但是有一个大问题,SHA256不能存太多中文字符,暂时没有很好的解决方法。

下面分享一下此工具的使用方法:

生成:

python XXX.py gen
------------如果您使用的是EXE发行版--------------
XXX.exe gen

加密:

python XXX.py enc -t "在此处输入您要加密的明文" -k 公钥名称.pem
------------如果您使用的是EXE发行版--------------
XXX.exe enc -t "在此处输入您要加密的明文" -k 公钥名称.pem

解密:

python XXX.py dec -c "在此处输入您要加密的明文" -k 私钥名称.pem
------------如果您使用的是EXE发行版--------------
XXX.exe dec -c "在此处输入您要解密的密文" -k 私钥名称.pem

使用本程序的步骤:

  1. 生成秘钥对  执行上方“生成”板块中的指令,生成秘钥对

  2. 加密  执行上方“加密”板块中的指令,生成密文

  3. 加密者和解密者之间的传输 将在执行“生成秘钥对”步骤时生成的私钥(要注意是私钥不是公钥)传输给解密者

  4. 解密者解密 执行上方“解密”板块中的指令,解密密文,生成明文


祝您使用愉快!

#转载请注明出处!