之前需要将一个.net项目迁移到java平台,哥一听这个,就懵了,没搞过.net啊,各种坑,各种心酸无力,在此就不表了。不过.net与java语法差不多,凭着我的执着与合理安排,最终项目迁移成功。在此过程中,接触了各种加解密算法,也算是一种收获,本着事后总结的原则,特写此主题文章。
MD5主要用在验签,与此用途相类似的还有RSA。特别是涉及到金额以及一些重要参数传输上,为了避免参数被拦截篡改,故在请求前需要对参数中一些重要参数按照一定顺序进行MD5加密,然后将加密后的签名也一并传输到服务端,服务端再对这些重要参数按照之前约定的顺序进行MD5加密,并将此加密后的密文与传输过来的签名进行equals判断,如果相等,则参数没被篡改,如果不等,则说明参数被篡改。废话不多说,代码奉上。
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
/**
* MD5加密
* @param source 源字符串
* @return 加密后的密文
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static String encode(String source) throws NoSuchAlgorithmException,
UnsupportedEncodingException {
// 确定计算方法
MessageDigest md5 = MessageDigest.getInstance("MD5");
// 加密后的字符串
byte[] bytes = md5.digest(source.getBytes("utf-8"));
return bytesToHexString(bytes);
}
private static String bytesToHexString(byte[] bArray) {
StringBuilder sb = new StringBuilder(bArray.length);
String sTemp;
for (int i = 0,j=bArray.length; i < j; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2) {
sb.append(0);
}
sb.append(sTemp);
}
return sb.toString();
}
}