package net.com.security;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Test {
public String testMD5(String str){
String result = null;
try {
MessageDigest mdInst = MessageDigest.getInstance("MD5");
byte[] buffer = str.getBytes();
mdInst.update(buffer);
result = byteToHex(mdInst.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return result;
}
private String byteToHex(byte[] buffer){
String temp = "";
String hex = "";
for(int i = 0; i if((temp = Integer.toHexString(buffer[i]&0xff)).length() == 1){
hex += "0"+temp;
}else{
hex += temp;
}
}
return hex;
}
public static void main(String[] args){
MD5Test md5Test = new MD5Test();
String str = "123456";
String result = md5Test.testMD5(str);
System.out.println("result="+result);
}
}
在32位的电脑中数字都是以32格式存放的,如果是一个byte(8位)类型的数字,他的高24位里面都是随机数字,低8位
才是实际的数据。java.lang.Integer.toHexString() 方法的参数是int(32位)类型,如果输入一个byte(8位)类型的数字,这个
方法会把这个数字的高24为也看作有效位,这就必然导致错误,使用& 0XFF操作,可以把高24位置0以避免这样错误
说明:
MD5算法说明
一、补位
二、补数据长度
三、初始化MD5参数
四、处理位操作函数
五、主要变换过程
六、输出结果
补位:
MD5算法先对输入的数据进行补位,使得数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。
具体补位操作:补一个1,然后补0至满足上述要求。
补数据长度:
用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数
据就被填补成长度为512位的倍数。
初始化MD5参数:
四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表
示的数字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210 处理位操作函数:
X,Y,Z为32位整数。
F(X,Y,Z) = X&Y|NOT(X)&Z
G(X,Y,Z) = X&Z|Y?(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X|not(Z)) 主要变换过程:
使用常数组T[1 ... 64], T[i]为32位整数用16进制表示,数据用16个32位
的整数数组M[]表示。
具体过程如下: /* 处理数据原文 */
For i = 0 to N/16-1 do /*每一次,把数据原文存放在16个元素的数组X中. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /结束对J的循环 /* Save A as AA, B as BB, C as CC, and D as DD.
*/
AA = A
BB = B
CC = C
DD = D /* 第1轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ /* Do the following 16 operations. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3
22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7
22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA
11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15]
[BCDA 15 22 16] /* 第2轮* */
/* 以 [abcd k s i]表示如下操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA
0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23]
[BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA
8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA
12 20 32] /* 第3轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35]
[BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA
10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43]
[BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47]
[BCDA 2 23 48] /* 第4轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51]
[BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55]
[BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59]
[BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63]
[BCDA 9 21 64] /* 然后进行如下操作 */
A = A + AA
B = B + BB
C = C + CC
D = D + DD end /* 结束对I的循环*/ 输出结果。 RSA算法非常简单,概述如下:
找两素数p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
取d*e%t==1
这样最终得到三个数: n d e
设消息为数M (M <n)
设c=(M**d)%n就得到了加密后的消息c
设m=(c**e)%n则 m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。
在对称加密中:
n d两个数构成公钥,可以告诉别人;
n e两个数构成私钥,e自己保留,不让任何人知道。
给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。
rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解
从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法
求得d。
RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,
最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用
RSA对刚才的加密密钥进行加密。
最后需要说明的是,当前小于1024位的N已经被证明是不安全的
自己使用中不要使用小于1024位的RSA,最好使用2048位的。
分享到:
相关推荐
基于MD5的加密算法,包括如何使用的例子,很好的实例。
MD5加密算法.javaMD5加密算法.java
Java MD5 加密是一种在Java编程环境中广泛使用的哈希函数技术,主要用于数据的校验和以及简单的...在提供的"javaMD5.rar"压缩包中,可能包含了具体的代码示例和详细注释,可以帮助你更好地理解和应用Java中的MD5加密。
JavaMD5加密工具类是Java编程中用于实现数据安全存储的一种常见方法,主要涉及到的是MD5(Message-Digest Algorithm 5)散列算法的应用。MD5是一种广泛使用的密码学哈希函数,它能够将任意长度的数据转化为固定长度...
`javamd5加密工具类`通常是指一个Java类库,提供MD5加密的功能。在描述中提到了几个关键步骤: 1. **解压**:这可能指的是下载了一个包含MD5加密功能的压缩文件,需要先进行解压操作,通常使用的是像WinRAR或7-Zip...
java实现MD5加密解密算法,java源代码~
2. **创建MessageDigest实例**:首先,我们需要创建一个`MessageDigest`实例,指定为MD5算法。这可以通过调用`getInstance("MD5")`方法完成。 ```java MessageDigest md = MessageDigest.getInstance("MD5"); ``` ...
对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载
java实现md5 加密解密(在网络中MD5是著名的不可逆算法,但是如果...则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配; 匹配成功,表示找到明文;但是此程序的时间耗费较高!仅提供一个解密的方法!)
在IT行业中,MD5加密算法在以下几个方面扮演着重要角色: 1. **数据校验**:当传输或存储文件时,可以通过计算文件的MD5摘要来验证文件是否在传输过程中被篡改。如果源文件和接收文件的MD5值匹配,则表明文件完整...
2. **混合加密**:为了增加安全性,开发者通常会采用其他加密算法与MD5结合,例如AES(Advanced Encryption Standard)、DES(Data Encryption Standard)或RSA等。这可能包括将MD5哈希值作为密钥或与其他密钥一起...
在Java或其他编程语言中,我们经常使用如RSA、DSA等非对称加密算法进行签名操作。 这个"MD5加密+签名算法Sign生成工具类"是为开发者提供的一种便利,避免了手动编写复杂的加密和签名逻辑。它可能包含以下功能: 1....
javaMD5加密,通过算法,将密码加密成56位的密文,但不能解密。。。。。。。。。。。。。。。。。。。。。。。。。
java开发工具类MD5加密算法-静态单例。
通过对`MD5`类的深入分析,我们不仅了解了MD5算法的核心概念和流程,还学会了如何在实际项目中使用此类进行数据加密。尽管MD5已不再适用于安全性要求极高的场景,但在许多日常开发工作中,它依然发挥着重要作用。
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要应用于信息安全领域,用于对数据进行单向加密,生成固定长度的摘要值。在Java中,MD5被用作一种...在实际开发中,应结合具体需求选择合适的加密算法。
java实现的MD5加密算法class类文件,可与4GL串并改进用户密码加密算法!
总之,Java中的MD5加密技术为数据提供了基础的安全保障,但鉴于其已知的弱点,应结合其他更安全的加密算法或机制,如SHA系列,或者使用更先进的密码学技术。在实际应用中,还需要考虑合规性和安全策略,确保数据的...
在Java中,我们可以利用`java.security.MessageDigest`类来实现MD5加密。下面我们将详细介绍MD5加密在Java中的应用及其原理。 MD5算法的基本思想是将任意长度的输入(又叫做预映射pre-image)通过一系列的数学运算...