python UDF csv 대량 md5 암호 화 작업 실현

작업 상 수요 에 부 딪 히 면 일부 휴대 전화 번 호 는 md5 암호 화 내 보 내야 합 니 다.데이터 안전 을 위해 인터넷 도 구 를 사용 하지 않 았 습 니 다.
md5 의 암호 화 알고리즘 은 오픈 소스 이 고 성숙 한 것 입 니 다.많은 언어 가 해당 하 는 가방 을 직접 사용 할 수 있 습 니 다.저 는 간단 한 python 을 써 서 이 루어 졌 습 니 다.다른 동료 가 hiveUDF 를 만들어 서 이 루어 졌 습 니 다.여기 서 모두 공유 하 겠 습 니 다.
목표:
csv 파일 을 읽 고 그 내용 을 md5 암호 화,32 비트 암호 화 하여 암호 화 된 밀 문 을 다른 csv 파일 에 저장 합 니 다.
python 구현:
(1)읽 을 csv 파일 을 준비 합 니 다.한 줄 에 휴대 전화 번 호 를 저장 하 다.

(2)python 코드:

#encoding=utf8
import 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         
, “13000000
” “13000000” with open(writefilename,'w') as wf: for row in rf.readlines(): wf.write(md5_encryption(row.strip())) wf.write('
') # with open(writefilename,'r') as rwf: count=0 while 1: buffer=rwf.read(1024*8192) if not buffer: break count+=buffer.count('
') print('line writed number:',count)
(3)결과


Hive UDF 실현:
(1)자바 로 클래스 를 작성 하여 암호 화 를 실현 하고 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');
OK
827ccb0eea8a706c4c34a16891f84e7b
Time taken: 0.139 seconds, Fetched: 1 row(s)
hive> 
hive> select phone,MD5(phone) from mid_latong_20200414 limit 5;
OK
1300****436 856299f44928e90****181b0cc1758c4
1300****436 856299f44928e90****181b0cc1758c4
1300****689 771dfa9ef00f43c****4901a3f1d1fa0
1300****689 771dfa9ef00f43c****4901a3f1d1fa0
1300****689 771dfa9ef00f43c****4901a3f1d1fa0
Time 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 값 을 얻 지 못 합 니 다.


첫 번 째 그림 과 두 번 째 그림 을 비교 한 결과 첫 번 째 그림 의 코드 에 따라 연속 적 으로 암호 화 할 때 실질 적 으로 암호 화 된 모든 명문 의 중첩 임 을 발견 했다.
첫 번 째 암호 화:csdn
두 번 째 암호 화:csdnblog
정확 한 방법 은 다음 과 같다.

이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기