未加密时 数据库泄露 密码丢失
案例:
公安局 开房记录 (宾馆刷身份证 记录在公安局系统中)
简单的加密算法 Md5: 将字符串专化为32 位的字符串(16进制的字符(0-f))不可逆(不能去破解,随机生成)
java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单
点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要和散列码请参照《数字证书简介》
MessageDigest 通过其getInstance系列静态函数来进行实例化和初始化。MessageDigest 对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算并返回结果
注
MD5 虽然不可逆 但是一些大神吧可能随机字符串存入数据库 可以解开 获得原始密码 故设置密码时尽量复杂点 (加盐)
1字节(byte)=8位(八个二进制数)
int类型 四个字节
java代码实现:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.sun.xml.internal.fastinfoset.Encoder;
public class md5Utils {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String pwd = "123"+"sdfgs";// 加盐 后面拼接字符串(增大复杂度)
encoder(pwd);
}
// 加密算法md5
private static void encoder(String pwd) {
// TODO Auto-generated method stub
try {
// 1 指定加密算法类型 (单例模式 类名调用方法获得对象)
MessageDigest digest = MessageDigest.getInstance("MD5");// 参数算法类型
// 2 将需要加密的字符串转化为byte类型的数组,然后生成散列码参数为字节数组(随机哈希计算。)即密码打乱。
byte[] bs = digest.digest(pwd.getBytes());
/* 运行结果长度为16位 思路每个bs中的byte转化为两个字符*/
//System.out.println( bs.length);
// 3 循环遍历bs 让其生成32位字符串 固定写法
// 4 拼接字符串
StringBuffer sb = new StringBuffer();
for(byte b : bs){
int i = b&0xff; // md5 固定写法 i 四个字节 32 位
// int 类型的i转换为16进制的字符
String hexString = Integer.toHexString(i);
/*java.lang.Integer.toHexString()此方法返回的字符串
* 表示的无符号整数参数所表示的值以十六进制(基数为16)*/
if(hexString.length()<2){
hexString = hexString+"0";
}
//System.out.println(hexString);
sb.append(hexString);
}
System.out.println(sb.toString());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("没有这样的算法类型!");
}
}
}
MD5认写识及手写
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 背景 在使用weex init初始化一个工程之后,会自动创建对应的基本配置文件,按顺序执行以下步骤,就可以看到效果...