/*
* MD5加密
*/
private String getMD5Str(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
System.out.println("NoSuchAlgorithmException caught!");
System.exit(-1);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
//16位加密,从第9位到25位
return md5StrBuff.substring(8, 24).toString().toUpperCase();
}
2. 16位的md5加密如何直接转换为 32位md5加密
这里你混淆了“位”
md5的输出只有128bit一种。
32个byte,或者32个ascii可显示字符形式的是其hex码的显示形式
16个byte是其直接输出形式。
16*8=128bit
这里只要把每4bit用一个char表示,就成了32个byte的可打印显示形式。
4个bit表示从[0,1,2,3...14,15],其中[10,15]区间用[A,B,C,...F]表示即可
3. MD5加密 32位加密比16位安全吗
MD5
是
定长
加密
利用矩阵等算法计算
具体算法可以在网上查到各种语言的代码
不算很长
按照理论来说
是不可逆的运算
据说
有人已经找出了它的逆运算
破解率也比较高
但是掌握这种技术的人还很少
目前来说MD5还是很广泛的应用各种行业
比如金融和军事
4. 请问android资源文件要怎么用md5加密
。。。android这种开源的东西,你整理出来的别人早就整理出来了。你有什么好担心的。github上面很多都是开源的项目,那都是值得你去学习的。
5. android md5加密怎么用
java">
importjava.security.MessageDigest;
publicclassMD5Tool{
publicstaticStringMD5(Stringstr){
MessageDigestmd5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch(Exceptione){
e.printStackTrace();
return"";
}
char[]charArray=str.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;i<charArray.length;i++){
byteArray[i]=(byte)charArray[i];
}
byte[]md5Bytes=md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
for(inti=0;i<md5Bytes.length;i++)
{
intval=((int)md5Bytes[i])&0xff;
if(val<16)
{
hexValue.append("0");A
}
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}
publicstaticStringencryptmd5(Stringstr){
char[]a=str.toCharArray();
for(inti=0;i<a.length;i++)
{
a[i]=(char)(a[i]^'l');
}
Strings=newString(a);
returns;
}
}
在要加密的地方,调用这个类的MD5方法就可以加密了,解密就调用这个类的encryptmd5方法,不过好像解密方法不完全正确,毕竟是解密,不可能对复杂字符加密后的解密完全正确。不过加密算法是完全没有问题的。
6. android md5加密一次第二次加密,会怎么样
一段信息经过MD5加密之后,形成128位的整数,而且MD5算法是不可逆的,你经过第一次加密之后,一般情况下不会被破解。经过一次加密,你第二次加密相当于把第一次加密后的整数当成字符串,再次加密之后还是128位。
7. Android 网络交互之MD5为什么要加盐
MD5自身是不可逆的 但是目前网路上有很多数据库支持反查询
如果用户密码数据库不小心被泄露黑客就可以通过反查询方式获得用户密码或者对于数据库中出现频率较高的hash码(即很多人使用的)进行暴力破解(因为它通常都是弱口令)
盐值就是在密码hash过程中添加的额外的随机值
比如我的id是癫ω倒④ゞ 密码是123456 存在数据库中的时候就可以对字符串123456/癫ω倒④ゞ 进行hash,而验证密码的时候也以字符串(要验证的密码)/癫ω倒④ゞ 进行验证
这样有另外一个笨蛋密码是123456的时候 依然能构造出不同的hash值 并且能成功的验证
这时候我的id就作为盐值 为密码进行复杂hash了
所以么。。盐值的作用是减少数据库泄露带来的损失
如果你RP非常好 猜中了我的密码是123456 我也阻止不了你啊
一般情况下,系统的用户密码都会经过一系列的加密才会存储到数据库或者别的资源文件。
盐值加密:把你原来密码,加上一些盐然后再进行一些列的加密算法。
比如你的密码是:899312 用户名是:gaobing
在security 中盐值加密可以是这样加盐的899312{gaobing} 然后 ,在进行一些列的加密。
上一篇日志中介绍了三种登陆设置,这边用数据库的那种作为例子:
<authentication-manager
<authentication-provider user-service-ref='myUserDetailsService'
<password-encoder hash=md5<salt-source user-property=username/</password-encoder
</authentication-provider
</authentication-manager
<b:bean id=myUserDetailsService
class=org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl
<b:property name=dataSource ref=dataS /
</b:bean说明:
<salt-source user-property=username/ 这一句即声明了所加的盐值,即数据库中的username字段。
<password-encoder hash=md5 在他的属性中指明了加盐之后的加密算法 即MD5(应该是32位 我测试是32位的)
这样设置后你的数据库中的密码也应该是经过盐值加密的。
比如username:gaobing 在数据库中的password应该是899312{gaobing}经过MD5加密后的 。
8. 32位MD5加密算法字符变量步骤
md5是单向加密,不可逆。
9. Android加密之MD5加密有什么意义
MD5 加密, 能保证数据的唯一性,加密不可逆,目前网上所说的MD5 加密破解, 利用的就是MD5 加密的唯一性, 其实就是利用数据进行一次或数次加密 生成的结果进行匹配的 并不是所谓的破解, 因为MD5加密不可逆。 银行账户密码虽然只有6位,但进行N次加密之后(过程可能继续加盐)导致密码基本破解不了。
10. android md5加密什么时候用
不用,验证的时候也一样,验证的时候,先把密码变量MD5加密,然后比对数据库,如果不等,就提示登录失败,具体的可以自己写判断,如果提交的和原来的相等,就直接登录