亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

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

工作上遇到需求,一批手機(jī)號(hào)要md5加密導(dǎo)出。為了保證數(shù)據(jù)安全,所以沒(méi)有采用網(wǎng)上工具來(lái)加密。

md5的加密算法是開(kāi)源的且成熟的,很多語(yǔ)言都有對(duì)應(yīng)包可以直接用,我寫了一個(gè)簡(jiǎn)單的python來(lái)實(shí)現(xiàn),另一位同事做了一個(gè)hiveUDF來(lái)實(shí)現(xiàn),這里都給大家分享一下。

目標(biāo):

讀取csv文件,并且對(duì)其中的內(nèi)容進(jìn)行md5加密,32位加密,將加密后的密文存入另一個(gè)csv文件。

python實(shí)現(xiàn):

(1)準(zhǔn)備好要讀取的csv文件。單列,一行存一個(gè)手機(jī)號(hào)碼。

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

(2)python代碼:

#encoding=utf8import hashlib #加密模塊import os#定義一個(gè)加密函數(shù),32位md5加密def md5_encryption(str): m=hashlib.md5() m.update(str) return m.hexdigest()#準(zhǔn)備要讀取的csv和要被寫入的csv,兩個(gè)文件要和此python放在同一個(gè)文件夾里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函數(shù)用于剔除換行符n,不然是對(duì)“13000000n”加密而不是對(duì)“13000000”加密 with open(writefilename,’w’) as wf: for row in rf.readlines(): wf.write(md5_encryption(row.strip())) wf.write(’n’) #計(jì)算一下寫入的行數(shù) 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)結(jié)果

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

hive UDF 實(shí)現(xiàn):

(1)用java寫一個(gè)類用來(lái)實(shí)現(xiàn)加密,用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

導(dǎo)入jar包:

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

新建一個(gè)函數(shù):

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兩種實(shí)現(xiàn)md5加密的方法啦!

補(bǔ)充:python的MD5加密的一點(diǎn)坑

曾經(jīng)在做某ctf題目時(shí),被這點(diǎn)坑,坑了好久。

廢話不多說(shuō),進(jìn)入正題。

python MD5加密方法

import hashlib //導(dǎo)入hash庫(kù)函數(shù)text = 'bolg.csdn.net' //要加密的文本md5_object = hashlib.md5() //創(chuàng)建一個(gè)MD5對(duì)象md5_object.update(text) //添加去要加密的文本print md5_object.hexdigest() //輸出加密后的MD5值坑在哪?

當(dāng)你在進(jìn)行第一次加密時(shí),程序正常輸出MD5值,但是在同一程序中進(jìn)行第二次明文加密時(shí),如果你的代碼是這樣寫,就不會(huì)得到正確的MD5值。

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

通過(guò)對(duì)第一張圖片和第二張圖片的比較,發(fā)現(xiàn)如果按照第一張圖片的代碼進(jìn)行連續(xù)加密時(shí),它實(shí)質(zhì)上是在加密每次明文的疊加。

即第一次加密:csdn

第二次加密:csdnblog

正確做法應(yīng)該是:

python UDF 實(shí)現(xiàn)對(duì)csv批量md5加密操作

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品自在欧美一区 | 成人免费播放视频777777 | 综合网女女网 | 巨胸美女扒开腿让我爽 | 久久久精品成人免费看 | 国产婷婷 | 国产对白91色拍高清精品 | 国产三级自拍 | 日本做爰免费大片视频 | www.夜色| 免费网站看黄 | 在线看成品视频入口免 | 亚洲黄频 | 在线观看国产高清免费不卡黄 | 国产成人麻豆tv在线观看 | 九九久久久久久久爱 | 日韩精品久久不卡中文字幕 | 九九精品成人免费国产片 | 国产成人高清亚洲一区久久 | 精品影院 | 免费观看国产网址你懂的 | 黄色片一级 | 欧美激情在线播放第16页 | 一级黄色播放 | 有没有毛片网站 | 国产久视频观看 | 97在线国产视频 | www.成人.com | 91视频聊天网 | 不卡的在线视频免费观看 | 免费一级毛片在线播放不收费 | 老妇毛片久久久久久久久 | 亚洲黄色影院 | 小明免费看视频 | 亚洲午夜在线播放 | 成人在线亚洲 | 91在线看| 国产真人毛片一级视频 | 成人欧美午夜视频毛片 | 黑人巨鞭大战白妞10级 | 日本三级网站 |