#! /bin/bash
echo "请选择模式："
echo "1. 生成密钥对"
echo "2. 加密文件"
echo "3. 解密文件"
read -p "请输入选项：" option

if [ $option -eq 1 ]; then
        read -p "请输入密钥对名称：" key_name
        openssl genrsa -out ${key_name}_private.key 16384
        openssl rsa -pubout -in ${key_name}_private.key -out ${key_name}_public.key
elif [ $option -eq 2 ]; then
        read -p "请输入要加密的文件或文件夹路径：" files_path
        read -p "请输入公钥文件名：([文件名]_public.key) " key
        read -p "请问是否需要向对方发送公钥？（y/n）" add_public_key
        mkdir zip
        7z a zip/zip ${files_path} -v2000b
        for f in zip/zip.* ; do openssl pkeyutl -encrypt -inkey ${key}_public.key -pubin -in $f -out $f.rsa; rm $f ;done
        if [ $add_public_key == "y" ]; then
        	read -p "请输入你的公钥名称：" pub_key_name
        	cp ${pub_key_name}_public.key public.key
                7z a encrypted.zip zip public.key
                rm public.key
        else
                7z a encrypted.zip zip
        fi
        rm -r zip
elif [ $option -eq 3 ]; then
	mkdir decrypted
        read -p "请输入要解密的文件路径：" file_path
        7z x ${file_path} -o./decrypted
        rm ${file_path}
        if test -f "decrypted/public.key"; then
                mv decrypted/public.key peer_public.key
                echo "对方的公钥已保存为peer_public.key"
        fi
        read -p "请输入私钥文件名：([文件名]_private.key)" key
        for f in decrypted/zip/zip.* 
        do 
        {
        	openssl pkeyutl -decrypt -inkey ${key}_private.key -in $f -out ${f%.rsa}
        }&
        done
        wait
        rm decrypted/zip/*.rsa
        7z x decrypted/zip/zip.7z.001 -o./decrypted
        rm -r decrypted/zip/
else
        echo "无效选项"
fi
