HIVE-UDF之MD5密钥算法实现

/**
 * Project: UDFTest
 *
 * File Created at 2012-11-28
 * $Id$
 *
 * Copyright 1999-2100 Alibaba.com Corporation Limited.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Alibaba Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Alibaba.com.
 */

package com.alibaba.hive.udf.lpxuan;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;

/**
 * TODO Comment of UDFMD5Hash
 *
 * @author pengxuan.lipx
 */

public class UDFMD5Hash extends UDF {

    private static final String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
            "a", "b", "c", "d", "e", "f"   };
    
    /**
     *
     * @param in  数据需要加密的值
     * @param seed  密钥
     * @return
     */
    public static String evaluate(LongWritable in, String seed){
        if (in == null ||seed == null) {
            return null;
        }
        String toEncrypt = in.toString() + seed;
        return getMd5(toEncrypt);
    }
    
    public static String evaluate(DoubleWritable in, String seed){
        if (in == null ||seed == null) {
            return null;
        }
        String toEncrypt = in.toString() + seed;
        return getMd5(toEncrypt);
    }
    
    public static String evaluate(IntWritable in, String seed){
        if (in == null ||seed == null) {
            return null;
        }
        String toEncrypt = in.toString() + seed;
        return getMd5(toEncrypt);
    }
    
    public static String evaluate(String in, String seed){
        if (in == null ||seed == null) {
            return null;
        }
        String toEncrypt = in.toString() + seed;
        return getMd5(toEncrypt);
    }

    private static String byteArrayToHexString(byte[] b) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }

    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n = 256 + n;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    private static String getMd5(String toEncrypt) {
        try {
            byte[] results = MessageDigest.getInstance("MD5").digest(toEncrypt.getBytes());
            String resultString = byteArrayToHexString(results);
            return resultString;
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @param args
     * @throws NoSuchAlgorithmException
     */
    public static void main(String[] args) throws NoSuchAlgorithmException {

        // TODO Auto-generated method stub
        UDFMD5Hash md5test = new UDFMD5Hash();
        LongWritable in1 = new LongWritable(12345678);
        String seed = "helloworld";
        DoubleWritable in2 = new DoubleWritable(12345678.0);
        String in3 = "12345678";
        System.out.println(md5test.evaluate(in1, seed));
        System.out.println(md5test.evaluate(in2, seed));
        System.out.println(md5test.evaluate(in3, seed));
    }

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值