如何加密你的 Python 代码( 三 )


加解密算法对称密钥加密算法对称密钥加密(Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密 , 是密码学中的一类加密算法 。这类算法在加密和解密时使用相同的密钥 , 或是使用两个可以简单地相互推算的密钥 。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高 。
常见的对称加密算法有:DES、3DES、AES、Blowfish、IDEA、RC5、RC6 等 。
对称密钥加解密过程如下:

如何加密你的 Python 代码

文章插图
 
明文通过密钥加密成密文 , 密文也可通过相同的密钥解密为明文 。
通过 openssl 工具 , 我们能够方便选择对称加密算法进行加解密 。下面我们以 AES 算法为例 , 介绍其用法 。
AES 加密# 指定密码进行对称加密$ openssl enc -aes-128-cbc -in test.py -out entest.py -pass pass:123456# 指定文件进行对称加密$ openssl enc -aes-128-cbc -in test.py -out entest.py -pass file:passwd.txt# 指定环境变量进行对称加密$ openssl enc -aes-128-cbc -in test.py -out entest.py -pass env:passwdAES 解密# 指定密码进行对称解密$ openssl enc -aes-128-cbc -d -in entest.py -out test.py -pass pass:123456# 指定文件进行对称解密$ openssl enc -aes-128-cbc -d -in entest.py -out test.py -pass file:passwd.txt# 指定环境变量进行对称解密$ openssl enc -aes-128-cbc -d -in entest.py -out test.py -pass env:passwd非对称密钥加密算法密钥加密(英语:public-key cryptography , 又译为公开密钥加密) , 也称为非对称加密(asymmetric cryptography) , 一种密码学算法类型 , 在这种密码学方法中 , 需要一对密钥 , 一个是私钥 , 另一个则是公钥 。这两个密钥是数学相关 , 用某用户公钥加密后所得的信息 , 只能用该用户的私钥才能解密 。
非对称加密算法的特点是算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂 , 而使得加密解密速度没有对称加密解密的速度快 。
常见的对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC 等 。
非对称密钥加解密过程如下:
如何加密你的 Python 代码

文章插图
 
明文通过公钥加密成密文 , 密文通过与公钥对应的私钥解密为明文 。
通过 openssl 工具 , 我们能够方便选择非对称加密算法进行加解密 。下面我们以 RSA 算法为例 , 介绍其用法 。
生成私钥、公钥# 辅以 AES-128 算法 , 生成 2048 比特长度的私钥$ openssl genrsa -aes128 -out private.pem 2048# 根据私钥来生成公钥$ openssl rsa -in private.pem -outform PEM -pubout -out public.pemRSA 加密# 使用公钥进行加密openssl rsautl -encrypt -in passwd.txt -inkey public.pem -pubin -out enpasswd.txtRSA 解密# 使用私钥进行解密openssl rsautl -decrypt -in enpasswd.txt -inkey private.pem -out passwd.txt基于加密算法实现源码保护对称加密适合加密源码文件 , 而非对称加密适合加密密钥 。如果将两者结合 , 就能达到加解密源码的目的 。
在构建环境进行加密我们发行出去安装包中 , 源码应该是被加密过的 , 那么就需要在构建阶段对源码进行加密 。加密的过程如下:
如何加密你的 Python 代码

文章插图
 
  1. 随机生成一个密钥 。这个密钥实际上是一个用于对称加密的密码 。
  2. 使用该密钥对源代码进行对称加密 , 生成加密后的代码 。
  3. 使用公钥(生成方法见 非对称密钥加密算法)对该密钥进行非对称加密 , 生成加密后的密钥 。
不论是加密后的代码还是加密后的密钥 , 都会放在安装包中 。它们能够被用户看到 , 却无法被破译 。而 Python 解释器该如何执行加密后的代码呢?
Python 解释器进行解密假定我们发行的 Python 解释器中内置了与公钥相对应的私钥 , 有了它就有了解密的可能 。而由于 Python 解释器本身是二进制文件 , 所以不需要担心内置的私钥会被看到 。解密的过程如下:
如何加密你的 Python 代码

文章插图
 
  1. Python 解释器执行加密代码时需要被传入指示加密密钥的参数 , 通过这个参数 , 解释器获取到了加密密钥


    推荐阅读