当前位置:   article > 正文

openssl生成秘钥对进行加密解密验签_openssl私钥加密 公钥解密

openssl私钥加密 公钥解密

可以使用OpenSSL进行加密解密和签名验证。OpenSSL是一个开源的加密库,提供了许多加密算法和协议的实现。以下是使用OpenSSL库进行加密解密和签名验证的步骤:

1、生成私钥:运行以下命令生成私钥文件(例如,private.key):

openssl genpkey -algorithm RSA -out private_key.pem

2、从私钥中提取公钥:运行以下命令生成公钥文件(例如,public.key):

openssl rsa -pubout -in private.key -out public.key

现在您已经生成了一个私钥文件(private.key)和一个公钥文件(public.key)。

接下来,您可以使用私钥对.tar.gz文件进行加密,然后使用公钥对加密后的数据进行解密。同时,您还可以对加密后的数据进行签名,然后使用公钥对签名进行验证。

加密文件:

openssl rsautl -encrypt -inkey private.key -in input.tar.gz -out encrypted.tar.gz

解密文件:

openssl rsautl -decrypt -pubin -inkey public.key -in encrypted.tar.gz -out decrypted.tar.gz

签名文件:(一般来说是对加密前的文件进行签名)

openssl dgst -sha256 -sign private.key -out signature.bin encrypted.tar.gz

验证签名:

openssl dgst -sha256 -verify public.key -signature signature.bin encrypted.tar.gz

请注意,上述命令中的"input.tar.gz"是待加密的.tar.gz文件,"encrypted.tar.gz"是加密后的文件,"decrypted.tar.gz"是解密后的文件,"signature.bin"是签名文件。

注意:非对称加密对加密文件的大小有要求,文件太大会导致无法加密,对于大文件的加密一般是先使用对称加密对大文件进行加密,加密完成后使用非对称加密对对称加密的密钥文件进行非对称加密,接收方通过公钥解密对称加密密钥,然后用密钥解密加密大文件,然后对解密出来的大文件进行验签。例子如下:

1、加密

  1. def main():
  2. if os.path.exists('cache'):
  3. shutil.rmtree('cache')
  4. if os.path.exists('new_build'):
  5. shutil.rmtree('new_build')
  6. os.mkdir('cache')
  7. os.mkdir('new_build')
  8. # 对原文件生成签名
  9. cmd = f'openssl dgst -sha256 -sign private.key -out {os.path.join("cache", app_name)}.sign {pyapp_name}'
  10. os.system(cmd)
  11. # 生成对称加密密钥
  12. cmd = f'openssl rand -out {os.path.join("cache", "symmetry")}.bin 32'
  13. os.system(cmd)
  14. # 对大文件进行对称加密
  15. cmd = f'openssl enc -aes-256-cbc -salt -in {pyapp_name} -out {os.path.join("cache", app_name)}.enc -pass file:{os.path.join("cache", "symmetry")}.bin'
  16. os.system(cmd)
  17. # 对对称加密密钥进行非对称加密
  18. cmd = f'openssl rsautl -encrypt -inkey private.key -in {os.path.join("cache", "symmetry.bin")} -out {os.path.join("cache", app_name)}.bin'
  19. os.system(cmd)
  20. # 对加密文件,加密对称密钥,签名文件打包
  21. cmd = f'tar -czf {os.path.join("new_build", pyapp_name)} -C cache {app_name}.enc {app_name}.sign {app_name}.bin'
  22. os.system(cmd)
  23. shutil.rmtree('cache')

2、解密

  1. _path = os.path.join(DOWNLOAD_PATH, app_name)
  2. # 对非对称加密的对称密钥进行解密
  3. cmd = f'openssl rsautl -decrypt -pubin -inkey public.key -in {os.path.join(_path, app_name)}.bin -out {os.path.join(_path, "symmetry.bin")}'
  4. os.system(cmd)
  5. # 通过解密出来的密钥对加密大文件进行对称解密
  6. cmd = f'openssl enc -d -aes-256-cbc -in {os.path.join(_path, app_name)}.enc -out {os.path.join(_path, filename)} -pass file:{os.path.join(_path, "symmetry.bin")}'
  7. os.system(cmd)
  8. # 对解密出来的大文件进行验签
  9. cmd = f'openssl dgst -sha256 -verify public.key -signature {os.path.join(_path, app_name)}.sign {os.path.join(_path, filename)}'
  10. res = os.system(cmd)
  11. if res == 0:
  12. print('签名验证通过')
  13. else:
  14. print('签名验证失败')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/308354
推荐阅读
相关标签
  

闽ICP备14008679号