python数据加密代码(python数据加密解密)

2023-02-28 23:13:57 摩斯密码知识 思思

Python简单加密操作

加密是将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥。

解密是按照制定的算法和关键数据,将一个密文数据进行逆向运算得到的正确的明文数据的过程

如:用户账号密码存储,此时任何人都不能查看该用户的明文密码

1.原始数据

2.编码(转换为字节数据)

3.使用算法加密

4.利用盐值更新密文

5.得到加密后的数据

编码:字符串.encode(编码名称)——字节数据

解码:字节数据.decode(编码名称)——字符串数据

==========================================

使用python之MD5进行加密

在许多接口,尤其涉及到金额的地方,都需要用加密算法对数据进行加密。像密码、金额之类的,如果不做加密,被篡改数据,公司的损失会很大。

这里主要说MD5加密(即摘要算法),也就是采用哈希算法,将不定长度的内容转化为32位16进制固定长度的内容。前后台都使用这套算法,再将两者的加密数据比对,如果一致说明数据加密正确,否则数据可能出现篡改。

在pyhon里,可以导入hashlib进行加密,如下

方法一:

执行结果如下图:

方法二:

执行结果如下图:

python数据加密代码(python数据加密解密) 第1张

python写的程序怎样加密

对 Python 加密时可能会有两种形式,一种是对Python转成的exe进行保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程。

1、 对 python转exe加壳

下载最新版Virbox Protector加壳工具,使用加壳工具直接对demo.exe进行加壳操作

2、对.py/.pyc加密

第一步,使用加壳工具对 python 安装目录下的 python.exe 进行加壳,将 python.exe 拖入到加壳工具 VirboxProtector 中,配置后直接点击加壳。

第二步,对.py/.pyc 进行加密,使用 DSProtector 对.py/.pyc 进行保护。

安全技术:

l 虚拟机外壳:精锐5的外壳保护工具,创新性的引入了预分析和自动优化引擎,有效的解决了虚拟化保护代码时的安全性和性能平衡问题。

l 碎片代码执行:利用自身成熟的外壳中的代码提取技术,抽取大量、大段代码,加密混淆后在安全环境中执行,最大程度上减少加密锁底层技术和功能的依赖,同时大量大段地移植又保证了更高的安全性。

l Virbox加密编译引擎:集编译、混淆等安全功能于一身,由于在编译阶段介入,可优化空间是普遍虚拟化技术无法比拟的,对代码、变量的混淆程度也有了根本的提升。

l 反黑引擎:内置R0级核心态反黑引擎,基于黑客行为特征 的(反黑数据库)反制手段。精准打击调试、注入、内存修改等黑客行为,由被动挨打到主动防护。

加密效果:

加密之前

以pyinstall 的打包方式为例,使用pyinstxtractor.py文件对log_322.exe进行反编译,执行后会生成log_322.exe_extracted文件夹,文件夹内会生成pyc文件。

成功之后会在同目录下生成一个文件夹

使用010 Editor添加几个字节,重命名为pyc文件

注【此处和python的版本有关,Python27的可以直接解压为pyc文件,Python34还需要添加几个字节】

然后使用EasyPython Decompiler 工具反编译pyc

成功之后通目录下会生成dis文件,生成出的dis文件可以用文本编辑器打开,看到源码

反编译后的log_322.exe的源码

加密之后:

【注:不同的打包方式原理不同,源码存放的位置也不同,所以需要保护的具体模块也是不同的】

加密之后再尝试解压log322.exe失败,已经无法进行反编译,使用常规反编译工具也是无法进行分析的。

怎样对 Python 源码加密

代码加密

大概整理了以下几种方法:

编译成pyc文件

使用py2exe将python代码转成window下执行的exe文件

关键代码部分使用c或者c++写,然后在python中调用

用C写一个license,进行license验证

作为一门解释型的语言,加密的难度超级大。下面来简单分析上面的解决方案:

编译成pyc文件几乎跟pyc没有区别,保护力度太低

要是在linux机器上就没法使用,而且这种exe文件也可以被破解的

核心代码部分是计算密集型,用的是pandas,numpy等库,用c重写,简直不可能,工作量太大。

没搞过,不知道………

看来上面的解决方案都是不行的,在stackoverflow上对这个问题也进行了详细的讨论,用我蹩脚的英文来翻译(意译)一下得票率最高的:

“有什么方法来解决这个问题吗?(加密的问题)”没有。任何保护都可以被逆向工程破解。就连DVD机的固件都可以被破解,尽管法律判定其为非法,但是AACS加密密钥还是泄露出来。

因为没有技术的方法可以阻止你的客户看你的代码,你必须用传统的商业方法。

1. 许可证,合约,条款,条件。只要用户签订了这些东西,及时用户可以看见代码,也会有法律约束(不过此建议在中国目前貌似不顶用)

2. 提供巨大的价值。如果你的东西非常好,而且价格很合理,那么用户很难拒绝——没必要浪费时间和金钱去搞逆向工程啥的,因为逆向工程是很费银子的。让你的产品有足够的性价比。

3. 经常性的升级和增加新的功能,使得逆向工程不那么好使。当下一个版本破坏了逆向工程,那么以前的破解就没有意义了。

4. 定制化生产,为不同的客户提供不同的产品。(貌似代价有点高啊)

5. 使用有时间限制的许可证,这会给你带来不好的名声,但是会保证你的软件会停止工作

6. 设计为web service.

代码混淆

既然加密不是一个好方法,那要还是不死心,那就做一个简单的混淆算了,虽然只能”防君子,不防小人“。但是不能就这样把代码暴露出来。

这里推荐一个找了好久的东西: pyobfuscate这个东西在window7中的cmd中貌似总是混淆失败,无奈用了MINGW32,居然搞定了。官方的资料有这样的介绍:

pyobfuscate有几种转化代码的方式,有些可逆,有些不可逆。

移除注释和文档 ( 不可逆)

改变缩进(可逆)

在tokens之间加入空格(一定程度上可逆)

重命名函数,类,和变量(不可逆)

在空白行中加入无效的代码

我没有选择混淆函数名和类名,因为其他地方还要调用呢。下面是我混淆的结果,还挺好看的:

def my_fuction_to_test ( self , start_date , end_date ) :

iiiii11iII1 = self . get_something ( start_date , end_date )

O0o = [ ]

for oO0 in iiiii11iII1 :

if oO0 [ "isOpen" ] == 1 :

IIIi1i1I = { }

OOoOoo00oo = dt . strptime ( oO0 [ 'calendarDate' ] , '%Y-%m-%d' )

IIIi1i1I [ 'day' ] = OOoOoo00oo . strftime ( '%Y%m%d' )

IIIi1i1I [ 'week' ] = oO0 [ 'isWeekEnd' ]

IIIi1i1I [ 'month' ] = oO0 [ 'isMonthEnd' ]

IIIi1i1I [ 'weekday' ] = OOoOoo00oo . weekday ( )

O0o . append ( IIIi1i1I )

iiI11 = pd . DataFrame ( O0o )

return iiI11