电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python UDF 實現對csv批量md5加密操作

瀏覽:27日期:2022-06-30 16:22:57

工作上遇到需求,一批手機號要md5加密導出。為了保證數據安全,所以沒有采用網上工具來加密。

md5的加密算法是開源的且成熟的,很多語言都有對應包可以直接用,我寫了一個簡單的python來實現,另一位同事做了一個hiveUDF來實現,這里都給大家分享一下。

目標:

讀取csv文件,并且對其中的內容進行md5加密,32位加密,將加密后的密文存入另一個csv文件。

python實現:

(1)準備好要讀取的csv文件。單列,一行存一個手機號碼。

python UDF 實現對csv批量md5加密操作

(2)python代碼:

#encoding=utf8import hashlib #加密模塊import os#定義一個加密函數,32位md5加密def md5_encryption(str): m=hashlib.md5() m.update(str) return m.hexdigest()#準備要讀取的csv和要被寫入的csv,兩個文件要和此python放在同一個文件夾里readfilename=os.path.join(os.path.dirname(__file__),'testcsv.csv')writefilename=os.path.join(os.path.dirname(__file__),'writecsv.csv')print(’read:’,readfilename)print(’write:’,writefilename)with open(readfilename,’r’) as rf: #逐行寫入加密后的密文,strip函數用于剔除換行符n,不然是對“13000000n”加密而不是對“13000000”加密 with open(writefilename,’w’) as wf: for row in rf.readlines(): wf.write(md5_encryption(row.strip())) wf.write(’n’) #計算一下寫入的行數 with open(writefilename,’r’) as rwf: count=0 while 1: buffer=rwf.read(1024*8192) if not buffer: break count+=buffer.count(’n’) print(’line writed number:’,count)

(3)結果

python UDF 實現對csv批量md5加密操作

python UDF 實現對csv批量md5加密操作

hive UDF 實現:

(1)用java寫一個類用來實現加密,用maven打成jar包

import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.commons.lang.StringUtils;import java.security.MessageDigest;public class MD5 extends UDF { public String evaluate (final String str) { if (StringUtils.isBlank(str)){ return ''; } String digest = null; StringBuffer buffer = new StringBuffer(); try { MessageDigest digester = MessageDigest.getInstance('md5'); byte[] digestArray = digester.digest(str.getBytes('UTF-8')); for (int i = 0; i < digestArray.length; i++) { buffer.append(String.format('%02x', digestArray[i])); } digest = buffer.toString(); } catch (Exception e) { e.printStackTrace(); } return digest; } public static void main (String[] args ) { MD5 md5 = new MD5(); System.out.println(md5.evaluate(' ')); }}

(2)配置一下pom.xml

<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>HiveUdf</groupId> <artifactId>HiveUdf</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>0.14.0</version> </dependency> <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-core</artifactId> <version>0.9.2-incubating</version> </dependency> <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-avatica</artifactId> <version>0.9.2-incubating</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0</version> </dependency> </dependencies></project>

(3)hive中配置udf

導入jar包:

hive> add jar hdfs:/user/udf/HiveUdf-1.0-SNAPSHOT.jar;

新建一個函數:

hive> create temporary function MD5 as ’MD5’;

使用:

hive> select MD5(’12345’);OK827ccb0eea8a706c4c34a16891f84e7bTime taken: 0.139 seconds, Fetched: 1 row(s)hive> hive> select phone,MD5(phone) from mid_latong_20200414 limit 5;OK1300****436 856299f44928e90****181b0cc1758c41300****436 856299f44928e90****181b0cc1758c41300****689 771dfa9ef00f43c****4901a3f1d1fa01300****689 771dfa9ef00f43c****4901a3f1d1fa01300****689 771dfa9ef00f43c****4901a3f1d1fa0Time taken: 0.099 seconds, Fetched: 5 row(s)

以上就是python和hiveUDF兩種實現md5加密的方法啦!

補充:python的MD5加密的一點坑

曾經在做某ctf題目時,被這點坑,坑了好久。

廢話不多說,進入正題。

python MD5加密方法

import hashlib //導入hash庫函數text = 'bolg.csdn.net' //要加密的文本md5_object = hashlib.md5() //創建一個MD5對象md5_object.update(text) //添加去要加密的文本print md5_object.hexdigest() //輸出加密后的MD5值坑在哪?

當你在進行第一次加密時,程序正常輸出MD5值,但是在同一程序中進行第二次明文加密時,如果你的代碼是這樣寫,就不會得到正確的MD5值。

python UDF 實現對csv批量md5加密操作

python UDF 實現對csv批量md5加密操作

通過對第一張圖片和第二張圖片的比較,發現如果按照第一張圖片的代碼進行連續加密時,它實質上是在加密每次明文的疊加。

即第一次加密:csdn

第二次加密:csdnblog

正確做法應該是:

python UDF 實現對csv批量md5加密操作

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 上海道勤塑化有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | DDoS安全防护官网-领先的DDoS安全防护服务商 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 上海刑事律师|刑事辩护律师|专业刑事犯罪辩护律师免费咨询-[尤辰荣]金牌上海刑事律师团队 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 |