本文分享知识:

  1. pandas读取Excel数据 read_excel()
  2. 使用Python的加密库 hashlib
  3. pandas中map方法使用
  4. pandas写入Excel数据 to_excel()

项目源码地址:https://gitee.com/myrensheng/encryption

我这里有一份客户的Excel数据,里面有客户的手机号和身份证号信息,这些信息不能泄露,你加密一下发给我。

面对经理紧急安排的任务,小凡不敢懈怠,暂时放下手中正在处理的任务,将精力集中到数据加密这件事情上。

小凡思考了一会,数据加密,常用的加密算法有:md5和sha,既然没有要求,那就选择最简单的md5加密吧。

不一会,小凡脑海中就构思出了两种解决办法:

1、在Excel中调用md5加密函数,但这个需要安装加密文件,时间上可能来不及

2、用Python中的加密库,只需要读取Excel中的数据,再将加密好的数据导出为Excel即可

经过慎重的考虑,小凡决定使用Python进行数据加密。

一、用 pandas 读取 Excel 数据

import pandas as pd
# Excel文件
excel_path = "./test.xlsx"
# pandas读取Excel数据,并保存到 df 变量中
df = pd.read_excel(excel_path)
# 随机查看5条数据
df.sample(5)

read_excel() 常用参数:

io:excel文件地址

sheet_name:默认为第一个表格

header:头部(列名)从第几行开始,默认第一行

除了用pandas还可以用xlrd库读取Excel,xlwt将数据写入Excel,详情请看:第三章内容

二、加密库 hashlib

获取到数据后,开始加密。我们先学习一下如何使用加密库hashlib,加密一个客户的身份证号?

import hashlib
# 加密的字符串
string = "730763747019734357"
# 字符串进行 utf-8 编码
utf_8_str = str(string).encode("utf8")
# 调用 hashlib.md5() 方法进行加密
encry_result = hashlib.md5(utf_8_str).hexdigest()
encry_result
# 'f29e8eb231261735b849ad248ff50573'

这样就把一个字符串用 md5 的方法加密完成啦。让我们稍微修饰一下,编写一个加密的函数。

def encryption_str(string, encry_model="md5_32", encry_style=True):
# 加密为 utf-8 编码
utf_8_str = str(string).encode("utf8")
# 函数字典
param_dict = {
"md5_32": hashlib.md5(utf_8_str),
"md5_16": hashlib.md5(utf_8_str),
"sha1": hashlib.sha1(utf_8_str),
"sha224": hashlib.sha224(utf_8_str),
"sha256": hashlib.sha256(utf_8_str),
"sha512": hashlib.sha512(utf_8_str)
}
encry_result = param_dict[encry_model].hexdigest()
if encry_model == 'md5_16':
encry_result = encry_result[8:-8]
# 返回结果
return encry_result if encry_style == "小写" else encry_result.upper()

嗯,只是稍微修改一下。

三、 pandas中的 map() 方法

现在有1000多条数据,怎样才能将这么多的数据一次性加密完成呢?

这就需要用到 map() 方法:

pandas.series.map(arg,na_action=None),arg为一个函数,将series中的每一个数据作为arg函数的参数

经常与 lambda 函数连用,即:

df[“列名”].map(lambda x:func(x))

表示将该列的每一个数据 x,传递给 func(),并把函数的返回值组成新的列

df["手机号_md5"] = df["手机号"].map(lambda x:encryption_str(x))
df["身份证号_md5"] = df["身份证号"].map(lambda x:encryption_str(x))
df.sample(5)

数据已经加密完成啦,接下来就把数据重新保存为 Excel 发给经理。

pandas.DataFrame.to_excel() 常用参数:

sheet_name:工作表名,默认为 sheet1

index:是否输入索引,默认为 True

# 将数据保存到新的 excel 中
df.to_excel("./客户数据_md5加密.xlsx")

整个过程耗时15分钟,小凡检查了一下加密后的数据,确定没有问题,便将Excel发给经理。

见经理一直没有回消息,小凡继续做着先前的数据报告。

四、数据加密工具

过了一会,经理过来啦。

做的很好,能告诉我怎么做的吗?经理问。

小凡将自己如何用Python加密数据的步骤讲给经理听,但是经理好像听不太懂。

有没有什么工具,直接就将excel数据加密完成,不用写代码?经理期待的问到。

没有吧,网上的工具都只能加密一个字符串,没有直接加密excel文件的工具。不过,有什么是Python不能实现的呢?

小凡将自己如何用Python加密数据的步骤讲给经理听,但是经理好像听不太懂。

有没有什么工具,直接就将excel数据加密完成,不用写代码?经理期待的问到。

没有吧,网上的工具都只能加密一个字符串,没有直接加密excel文件的工具。不过,有什么是Python不能实现的呢?

于是,小凡决定用Python做个加密工具,这样操作起来就很方便啦。

用Python中的hashlib实现md5和sha加密的更多相关文章

  1. Java的单向加密算法MD5和SHA——加密和解密

    出自:http://www.cnblogs.com/onetwo/p/3875551.html 1.JDK中MD5和SHA加密的主要类 在JDK6.0中,与MD5与SHA密切相关的几个类的类图如下:  ...

  2. JAVA加密技术-----MD5 与SHA 加密

    关于JAVA的加密技术有很多很多,这里只介绍加密技术的两种 MD5与 SHA. MD5与SHA是单向加密算法,也就是说加密后不能解密. MD5 ---信息摘要算法,广泛用于加密与解密技术,常用于文件校 ...

  3. MD5和SHA加密实现

    @Test public void TestMD5AndSHA() throws NoSuchAlgorithmException { String MD5=Md5("123456" ...

  4. python中常用的base64 md5 aes des crc32等的加密解密

    1.base64 Python内置的base64模块可以实现base64.base32.base16.base85.urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形 ...

  5. 【Python】使用hashlib进行MD5和sha1摘要计算

    代码: import hashlib hash = hashlib.md5() hash.update('http://www.cnblogs.com/xiandedanteng'.encode('u ...

  6. Python中使用hashlib进行加密的简单使用

    import hashlib ''' 原文= '字符串' 哈希加密对象 = hashlib.加密算法( 原文.encode('utf-8') ) 密文 = 哈希加密对象.hexdigest() #密文 ...

  7. DES,AeS加解密,MD5,SHA加密

    1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...

  8. MD5、sha加密

    MD5: 不可逆,一般用于密码的加密存储,数字签名,文件完整性验证 MD5码具有高度离散性,不可预测 MD5长度为128位,重复率几乎为0 易受密码分析的攻击 Sha: 对于长度小于2^64位的消息, ...

  9. python 模块之hashlib

    Hashlib模块 Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据,其他的所有加密算法使用方式上基本类似. h ...

  10. 加密算法中BASE64、MD5、SHA、HMAC等之间的区别

    http://blog.csdn.net/lplj717/article/details/51828692 根据项目需要了解了一下几种加密算法(参考其他博客),内容简要介绍BASE64.MD5.SHA ...

随机推荐

  1. 前端之Vue day08 Vue3项目搭建、setup、toRefs

    一.Vue3 介绍 # 新项目使用vue3,有部分老项目使用vue2 # vue3 的变化 1.性能的提升 -打包大小减少41% -初次渲染快55%, 更新渲染快133% -内存减少54% 2.源码的 ...

  2. Linux使用tailf高亮显示关键字

    Linux下使用tail查找日志文件关键词高亮显示 ① 多个关键词高亮显示: tail -f 日志文件 | perl -pe 's/(关键词)/\e[1;颜色$1\e[0m/g' 示例: tail - ...

  3. @Configuration 配置类打断点后,一启动项目读取到该配置类的话就会进断点

    @Configuration 配置类的话,打断点的时候,一启动项目就会读取配置信息,然后你在@Configuration 配置的类中打断点的话,一启动项目就会读取配置类,然后就会进断点,跟你平常的co ...

  4. [转]Windows 批处理命令教程

    第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可 ...

  5. Salesforce 发送Email时遇到的问题(Case当中的Filed不出现Email选项:ケースのフィールドにメールタブが表示されない)。

    普段はケースの発生源はメールと選択する場合.ディフォルトで「フィールド」の中に「メール」というタブが出てきますが. (平时当我们选择[Case]的[来源]为[Email]时,默认就会在field中出现 ...

  6. uniapp打包app出现HTML5+ Runtime

    在manifest.json->源码视图的 "app-plus"下面添加: "app-plus" : { "compatible" : ...

  7. VMWARE 虚拟机配置优化

    如果硬件性能不足,可做如下优化. 1.禁用 VMWARE  虚拟内存功能. 编辑->首选项-> 内存  , 设置如下,禁用内存交换. 2. 如果虚拟机装在机械盘,而电脑有固太硬盘,可通过 ...

  8. JS——如果数组中的信息存在多个相同的属性,那么则将这些相同的信息放到同一个children中。

    var arr = [ {name: '张三', age: 10, sex: '男'}, {name: '李四', age: 10, sex: '男'}, {name: '钱五', age: 11, ...

  9. uniapp文件复制,重命名以及删除

    查找某目录下的文件 plus.io.resolveLocalFileSystemURL(        "_www/static/本地.png",            funct ...

  10. 蓝桥杯训练赛二-2021 问题 G: 坐标排序

    题目描述 请将坐标x,y,z依照以下规则排序: x为第一关键字,当x相同时,依照y(第二关键字)大小来排序,当y相同时,依照z大小来排序(第三关键字) 给出了若干坐标,和一个数k,请输出按关键字排序第 ...