谁知道md5算法改如何使用,大家帮个忙了!
指点下了。
指点下了。
解决方案 »
- 论坛的引用回复功能怎么做呀?求高手解答....
- POI写入速度太慢,求指点
- 一个诡异问题,拦截器不兼容IE6、IE7,其他浏览器都兼容?
- 求JDBC经典的书··
- 如果系统的库存数据或者已收现金和实际不符,应如何找出问题?
- action语句如何写的问题(不好意思,只有最后的20分了)
- 华为短信网关API出现问题
- 求助大神! 用spring定时器修改数据库数据时 org.hibernate.LazyInitializationException
- hibernate 影射文件编辑工具哪个好
- 我做了一个子菜单,还有两个功能没有实现,想请大家帮我看一下!
- jquery get方法执行完,回调函数不执行!!
- 急求将一个php写的函数用java重新写
你到网上去下载,能下载到的。
这个jar里面有个digestUtil的一个类。里面有个md5Hex()的一个方法,还有md5()方法,还有几个方法
常用的是md5Hex() ,md5()这两个
md5Hex()可以对一个string进行加密,得到一个string的字符串。这个字符串没有规律。很多的网银对接都是这样做的,用的大部分都是这两个方法。个人愚见!
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if(i<0) i+= 256;
if(i<16)
buf.append("0");
buf.append(Integer.toHexString(i));
} System.out.println("result: " + buf.toString());//32位的加密 System.out.println("result: " + buf.toString().substring(8,24));//16位的加密 } catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
论坛上强调的是不能讽刺别人,今天不得已回报!你懂网银接口开发不?你懂原理不?自己写过不?哥来告诉你网银开发是怎么做到的
其实不管网银,支付宝,财付通等接口开发,说白了也不算是什么很神奇的东西,说白了还不能算是真正的接口开发;
他的原理可以这样去实现
第三方公司早就先写好接口文档,文档已经定义了你要怎么去做
他们其实是这样去想的。他给你一个页面让你去请求,把这个页面请求页面用filter拦截,他们会让你传一些必须的参数,如productID ,Id,price,span(签名)等,其中span的值为他们文档上写的那样,比如把你本地的参数拼接String str=productID+Id+price+密钥(他们给你的字符串);
String span=DigestUtil.md5Hex(str);//这便是在你本地进行了一次算法(加密)你通过form的post请求,把productID ,Id,price,span一起传过去,于是在你一请求页面是就会被filter拦截,他们拦截获取你的参数,然后在他们自己的服务后台用md5的算法也进行一次算法(加密),看看得到的结果跟你的span的值同不同,如果相同则说明中间没有被别人做过手脚,说明是安全的数据,于是dofilter放行,于是让你把数据请求到他们的服务器上了。这便是接口对接
如
String str=a+b+c+密钥(他们给你的字符串);//这个的拼接有很多种,看他们文档怎么写,如果你是接口开发人员,那你想怎么定义就怎么定于,比如a参数与b参数之间加个,也可以;然后用md5算一次得到一个span(签名),String span=DigestUtil.md5Hex(str);同时当你请求到filter的时候他们也这样做String a=request...
String b=request...
String c=request...String str=a+b+c+密钥(他们根据你的id从他们数据库中查询你的密钥);
String span2=DigestUtil.md5Hex(str);判断你的span跟他算的span2相等不,如果等则让你过去,dofilter
否则让你请求到一个错误的页面。之所以这样做就是为了判断你的参数在中间有人做了手脚没有,或者看看是不是有些人故意去提交的。为了防止这些,于是别人用MD5,DES等算法,因为算法原理都一样,只要你放进去的东西一样,得到的结果也一样。
public static String MD5(String inStr) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}
char[] charArray = inStr.toCharArray();
byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i]; byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
} return hexValue.toString();
} 调这个方法!试试!