实现一个对手机号进行RC4加密,解密的udf函数。

1.RC4.java

package com.zz.udf;import java.math.BigInteger;public class RC4 {// 指定一个密钥public static String RC4_key = "7654qwe¥%&";// 解密public static String decry_RC4(String data) {if (data == null) {return null;}byte[] data_b = new BigInteger(data).toByteArray();byte[] data_decode = RC4Base(data_b, RC4_key);String res = new BigInteger(data_decode).toString();return res;}// 加密public static String encry_RC4(String data) {if (data == null) {return null;}byte[] data_b = new BigInteger(data).toByteArray();byte[] data_encode = RC4Base(data_b, RC4_key);String res = new BigInteger(data_encode).toString();return res;}private static byte[] initKey(String aKey) {byte[] b_key = aKey.getBytes();byte state[] = new byte[256];for (int i = 0; i < 256; i++) {state[i] = (byte) i;}int index1 = 0;int index2 = 0;if (b_key == null || b_key.length == 0) {return null;}for (int i = 0; i < 256; i++) {index2 = ((b_key[index1] & 0xff) + (state[i] & 0xff) + index2) & 0xff;byte tmp = state[i];state[i] = state[index2];state[index2] = tmp;index1 = (index1 + 1) % b_key.length;}return state;}private static byte[] RC4Base(byte[] input, String mKkey) {int x = 0;int y = 0;byte key[] = initKey(mKkey);int xorIndex;byte[] result = new byte[input.length];for (int i = 0; i < input.length; i++) {x = (x + 1) & 0xff;y = ((key[x] & 0xff) + y) & 0xff;byte tmp = key[x];key[x] = key[y];key[y] = tmp;xorIndex = ((key[x] & 0xff) + (key[y] & 0xff)) & 0xff;result[i] = (byte) (input[i] ^ key[xorIndex]);}return result;}public static void main(String[] args) {String phone_str = "38612345679";String enPhone = encry_RC4(phone_str);System.out.println("加密后的手机号:  "+enPhone);System.out.println("加密后的手机号长度:  "+enPhone.toString().length());String phone = decry_RC4(enPhone);System.out.println("解密后的手机号:  "+phone);}
}
//-----加密前----------加密后---------
// 18612345670     299598236947
// 18612345671     299598236946
// 18612345672     299598236957
// 18612345673     299598236956
// 18612345674     299598236959
// 18612345675     299598236958
// 18612345676     299598236953
// 18612345677     299598236952
// 18612345678     299598236955
// 18612345679     299598236954
// 28612345679     305974356250
// 38612345679     315301180698

2.RC4EncodeUDF.java

package com.zz.udf;
import org.apache.hadoop.hive.ql.exec.UDF;public class RC4EncodeUDF extends UDF{public String evaluate(String values) {String enPhone = RC4.encry_RC4(values);return enPhone;}
}

3.RC4DecodeUDF.java

package com.zz.udf;
import org.apache.hadoop.hive.ql.exec.UDF;public class RC4DecodeUDF extends UDF{public String evaluate(String values) {String phone = RC4.decry_RC4(values);return phone;}
}

4.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>org.example</groupId><artifactId>RC4UDF</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF8</project.build.sourceEncoding><!--Hadoop版本更改成自己的版本-->
<!--        <hadoop.version>2.5.0-cdh5.2.0</hadoop.version>--><hadoop.version>2.6.0-cdh5.13.0</hadoop.version><hive.version>1.2.1</hive.version></properties><repositories><!--加入Hadoop原生态的maven仓库的地址--><repository><id>Apache Hadoop</id><name>Apache Hadoop</name><url>https://repo1.maven.org/maven2/</url></repository><!--加入cdh的maven仓库的地址--><repository><id>cloudera</id><name>cloudera</name><url>https://repository.cloudera.com/artifactory/cloudera-repos/</url></repository></repositories><dependencies><!--添加hadoop依赖--><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop.version}</version></dependency><!--添加hive依赖--><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>${hive.version}</version></dependency></dependencies><!--下面是用于打包的插件,如果不用这个插件导出jar可能会出现问题--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>1.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.handlers</resource></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.neu.hive.UDF.ToUpperCaseUDF</mainClass></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.schemas</resource></transformer></transformers></configuration></execution></executions></plugin></plugins></build></project>

Java 实现手机号码的RC4加密、解密相关推荐

  1. java rc4_java实现的RC4加密解密算法示例

    本文实例讲述了java实现的RC4加密解密算法.分享给大家供大家参考,具体如下: 有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个Java 版本的RC4加解密算法. publi ...

  2. java实现rc4密码_java实现RC4加密解密的实例教程

    这篇文章主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下 本文实例讲述了java实现的RC4加密解密算法.分享给大家 ...

  3. [转]DES加密 java与.net可以相互加密解密两种方法

    [转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...

  4. java pgp加密_基于Java Bouncy Castle的PGP加密解密示例

    # re: 基于Java Bouncy Castle的PGP加密解密示例  回复  更多评论 2016-03-02 10:32 by 毛小龙 对文件进行加密 在测试类里面已经跑通了 抽取出来调用就报这 ...

  5. python 加密解密 rc4_python实现rc4加密解密,base64输出

    这里将告诉您python实现rc4加密解密,base64输出,具体实现方法:from Crypto.Cipher import ARC4 as rc4cipher import base64 def ...

  6. 1、【java数据安全】数据安全之加密解密(base64、MD、SHA、DES、AES、IDEA、PBE、DH、RSA、EIGamal)、数字签名(DSA、ECDSA)和数字证书介绍、应用示例详细介绍

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

  7. RC4加密解密算法原理及实现对文件的加解密

    本文简单实现了RC4算法对于文件的加解密,并已经验证成功.同时实现了对RC4算法加解密较大文件的测速 RC4加密解密算法的原理: 首先,通过我的理解,RC4算法所依赖的最根本原理是:对明文使用同一个密 ...

  8. RC4加密解密算法123

           RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码. RC4是流密码streamcipher中的一 ...

  9. RC4加密解密java算法

    有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个java 版本的RC4加解密算法. public static String HloveyRC4(String aInput,S ...

最新文章

  1. git config命令使用
  2. python免费试听-小栈春季编程免费试听课 倒数6天!
  3. 给大家一个自己上牌的参考!
  4. sql添加列,删除列,修改列
  5. python数据模型搭建_python之路(19)django数据库模型(model)
  6. VHDL其他顺序语句
  7. 销售流程图_工作流程图网络图模板,招聘销售合同库存,完整设计拿来就用
  8. 《Pro ASP.NET MVC 3 Framework》学习笔记之一【MVC的历程,优点,HelloWorld】
  9. 千呼万唤始出来 ===Visual Studio Team System 2008 Team Suite 中文版 Out!!!
  10. ACdream群赛(4)总结
  11. return、break、continue三者的区别
  12. HTML5期末大作业:学校网站设计——初级中学网站(16页)HTML+CSS+JavaScript 学校网页设计作业 网页设计作业 学生个人设计成品,网页设计作业
  13. 最新《择善教育》C/C++黑客编程项目实战教程
  14. 李理:自动梯度求解——使用自动求导实现多层神经网络
  15. 16、TFT-LCD 1.8寸显示屏使用
  16. 深度学习之ISAR超分辨率成像
  17. android7.0后台,安卓7.0带来一键清理后台 真能使手机变快吗
  18. ym——Android从零开始(27)(山寨版微信-上)(新)
  19. python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python
  20. Several anatomical structure pics 一些大脑解剖结构图

热门文章

  1. sync包——互斥锁
  2. CSS 属性 content 有什么作用? 有什么应用?(琐碎知识点整理)
  3. 常用的电平转换方案(74HC245、74LVC4245等)
  4. rejected from java.util.concurrent.ThreadPoolExe错误
  5. IP大混战,春节档你最看好谁?
  6. 白话数字签名(3)——Web程序中的数字签名 1
  7. Java DecimalFormat 格式化数字,取2位小数,按位取小数,按要求格式化小数 float,double,int,等类型都支持
  8. python爬取糗事百科超搞笑图片
  9. 快速打造一款新款爆品可以这么做
  10. python将字符串转换为数字信号的过程_如何检测一个字符串是否可以转换为数字...