附:
#针对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
使用本程序的步骤:
生成秘钥对 执行上方“生成”板块中的指令,生成秘钥对
加密 执行上方“加密”板块中的指令,生成密文
加密者和解密者之间的传输 将在执行“生成秘钥对”步骤时生成的私钥(要注意是私钥不是公钥)传输给解密者
解密者解密 执行上方“解密”板块中的指令,解密密文,生成明文
祝您使用愉快!
#转载请注明出处!