谁知道md5算法改如何使用,大家帮个忙了!
指点下了。
------解决方案--------------------
要使用md5算法,你先记得导入一个jar包commons-codec-1.3.jar
你到网上去下载,能下载到的。
这个jar里面有个digestUtil的一个类。里面有个md5Hex()的一个方法,还有md5()方法,还有几个方法
常用的是md5Hex() ,md5()这两个
md5Hex()可以对一个string进行加密,得到一个string的字符串。这个字符串没有规律。
很多的网银对接都是这样做的,用的大部分都是这两个方法。
个人愚见!
------解决方案--------------------
------解决方案--------------------
private static void Md5(String plainText ) {
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();
}
}
------解决方案--------------------
------解决方案--------------------
等于是你在本地把所有的参数拼接,
如
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等算法,因为算法原理都一样,只要你放进去的东西一样,得到的结果也一样。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
// MD5加码。32位
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;