MD5算法与sign签证
参考:TS_A1的博客,网址:http://blog.csdn.net/typa01_kk/article/details/49152173
1 问题说明
sign签证的可以解决,参数被修改。让服务器端和客户端都有相同的生成sign的方法,只有前端和后端生成的sign相同,则说明,没有被修改。
如参数为:
{"option":{"reqtime":xxx},"content":{"password":"222","username":"111"}},之后通过对该字符串签证,如对该串进行MD5加密,如MD5 64位加密,生成sign。放到
{"option":{"reqtime":xxx},"content":{"password":"222","username":"111"},"sign":"XXX生成的加密"}
下面实例如果jdk为8以下,则会出现sun.misc.BASE64Encoder包,查找不到,
因为sun.misc.BASE64Encoder/BASE64Decoder类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用,在eclipse中需要项目->Build Path->JRE System Library,第一行 Edit后,添加允许 Accessible输入:**,即可。
2 实例
MD5有16、32、64位加密。
package com.util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
/**
* MD5 encrypt algorithm. <br>
* Encryption irreversible.
* @author Tony_tian
* @version 0.0.1 <br> 2015-10-15 12:57:12
* */
public final class MD5 {
/**Determine encrypt algorithm MD5*/
private static final String ALGORITHM_MD5 = "MD5";
/**UTF-8 Encoding*/
private static final String UTF_8 = "UTF-8";
/**
* MD5 16bit Encrypt Methods.
* @param readyEncryptStr ready encrypt string
* @return String encrypt result string
* @throws NoSuchAlgorithmException
* */
public static final String MD5_16bit(String readyEncryptStr) throws NoSuchAlgorithmException{
if(readyEncryptStr != null){
return MD5.MD5_32bit(readyEncryptStr).substring(8, 24);
}else{
return null;
}
}
/**
* MD5 32bit Encrypt Methods.
* @param readyEncryptStr ready encrypt string
* @return String encrypt result string
* @throws NoSuchAlgorithmException
* */
public static final String MD5_32bit(String readyEncryptStr) throws NoSuchAlgorithmException{
if(readyEncryptStr != null){
//Get MD5 digest algorithm's MessageDigest's instance.
MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
//Use specified byte update digest.
md.update(readyEncryptStr.getBytes());
//Get cipher text
byte [] b = md.digest();
//The cipher text converted to hexadecimal string
StringBuilder su = new StringBuilder();
//byte array switch hexadecimal number.
for(int offset = 0,bLen = b.length; offset < bLen; offset++){
String haxHex = Integer.toHexString(b[offset] & 0xFF);
if(haxHex.length() < 2){
su.append("0");
}
su.append(haxHex);
}
return su.toString();
}else{
return null;
}
}
/**
* MD5 32bit Encrypt Methods.
* @param readyEncryptStr ready encrypt string
* @return String encrypt result string
* @throws NoSuchAlgorithmException
* */
public static final String MD5_32bit1(String readyEncryptStr) throws NoSuchAlgorithmException{
if(readyEncryptStr != null){
//The cipher text converted to hexadecimal string
StringBuilder su = new StringBuilder();
//Get MD5 digest algorithm's MessageDigest's instance.
MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
byte [] b = md.digest(readyEncryptStr.getBytes());
int temp = 0;
//byte array switch hexadecimal number.
for(int offset = 0,bLen = b.length; offset < bLen; offset++){
temp = b[offset];
if(temp < 0){
temp += 256;
}
int d1 = temp / 16;
int d2 = temp % 16;
su.append(Integer.toHexString(d1) + Integer.toHexString(d2)) ;
}
return su.toString();
}else{
return null;
}
}
/**
* MD5 32bit Encrypt Methods.
* @param readyEncryptStr ready encrypt string
* @return String encrypt result string
* @throws NoSuchAlgorithmException
* */
public static final String MD5_32bit2(String readyEncryptStr) throws NoSuchAlgorithmException{
if(readyEncryptStr != null){
//The cipher text converted to hexadecimal string
StringBuilder su = new StringBuilder();
//Get MD5 digest algorithm's MessageDigest's instance.
MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
//Use specified byte update digest.
md.update(readyEncryptStr.getBytes());
byte [] b = md.digest();
int temp = 0;
//byte array switch hexadecimal number.
for(int offset = 0,bLen = b.length; offset < bLen; offset++){
temp = b[offset];
if(temp < 0){
temp += 256;
}
if(temp < 16){
su.append("0");
}
su.append(Integer.toHexString(temp));
}
return su.toString();
}else{
return null;
}
}
/**
* MD5 16bit Encrypt Methods.
* @param readyEncryptStr ready encrypt string
* @return String encrypt result string
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
* */
public static final String MD5_64bit(String readyEncryptStr) throws NoSuchAlgorithmException, UnsupportedEncodingException{
MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);
BASE64Encoder base64Encoder = new BASE64Encoder();
return base64Encoder.encode(md.digest(readyEncryptStr.getBytes(UTF_8)));
}
public static void main(String[] args) {
try {
String md516 = MD5.MD5_16bit("kaka123");
System.out.println("16bit-md5:\n" + md516); //
String md532 = MD5.MD5_32bit("kaka123");
String md5321 = MD5.MD5_32bit1("kaka123");
String md5322 = MD5.MD5_32bit2("kaka123");
System.out.println("32bit-md5:"); //5d052f1e32af4e4ac2544a5fc2a9b992
System.out.println("1: " + md532);
System.out.println("2: " + md5321);
System.out.println("3: " + md5322);
String md564 = MD5.MD5_64bit("kaka123");
System.out.println("64bit-md5:\n" + md564); //
} catch (Exception e) {
e.printStackTrace();
}
}
}
MD5算法与sign签证相关推荐
- 漫画:什么是MD5算法
转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按照规则,把参数名和 ...
- 漫画:什么是MD5算法?
来自:梦见(微信号:dreamsee321) 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按 ...
- 用js将待签名数据以UTF-8的格式转字节流,对字节流进行MD5算法得到的签名字节流,再经过Base64转换为字符串
最近碰到一个接口是要数字签名的,给的示范是用java写的.一开始没明白直接用了对字节流进行了md5加密,后面在java里面把这段代码运行了一遍才发现md5加密后仍然是字节流,然后在md5中找到了这个 ...
- [js] MD5算法
js版md5算法: /** * * MD5 (Message-Digest Algorithm) * http://www.webtoolkit.info/ * **/var MD5 = functi ...
- MD5算法之C#程序
MD5算法比较特别,最适合用汇编语言来写,好多高级语言对之无能无力或效率极低. 比如我最开始尝试用Python和Euphoria编写,发现不太容易.相比而言,C#作为C家簇 中新兴的一门.net语言, ...
- T-SQL MD5算法实现
转自:http://www.cnblogs.com/yeagen/archive/2009/02/08/1386374.html 函数代码: /**************************** ...
- MD5算法了解(JAVA实现)
MD5算法:尽管已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们能够在其站点上找到相应的md5值进行校验,假设md5值不一致,也就是说文件被人动过(一般都 ...
- C#的加密解密算法,包括Silverlight的MD5算法
C#的加密解密算法,包括Silverlight的MD5算法 下面是一段加密解密工具类,其中的WinFormMD5Encrypt方法可以使得Winform和WebForm下的MD5加密结果一致,默认他们 ...
- java md5包_JAVA中有没有提供MD5算法的包啊?
拉莫斯之舞 有,在java.security包的MessageDigest类.例子:import java.security.MessageDigest;public class Test2 {pub ...
最新文章
- 本地连接虚拟机数据库或远程数据库
- php isoptional,entity-framework – 实体框架7 Fluent API无法识别IsOptional()
- 关于label在ie8,9下的兼容问题???
- 【洛谷5284】[十二省联考2019] 字符串问题(后缀树优化建边)
- Android游戏开发
- conda pip 安装NumPy速度不佳解决方案
- Fortran95学习总结
- 自制光猫超级密码解密工具
- 谈电子信息系统机房设计规范——访中国电子工程设计院副总工程师钟景华
- JAVA钓鱼游戏_java如何实现纸牌游戏之小猫钓鱼算法
- 查看 Chrome 下载的文件的真实下载地址
- 人工智能是否会改写商业规则
- linux生成.so库,调用.so库函数
- 数据结构笔记_34 赫夫曼编码压缩、解压文件
- 还在找icon吗,这里有你想要的一切!!!
- 关于UITableView的Cell复用谈谈我的一些心得滴水穿石
- Paypal收款扣手续费计算方法,终于遇到了次
- Kaggle添加竞赛数据集到自己的kaggle notebook
- 找出汉字的拼音,既有各汉字的首字母和所有汉字的全拼
- 5款相见恨晚的在线设计工具,原型海报流程图轻松搞定