`

JavaMD5加密算法

    博客分类:
  • JAVA
阅读更多
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位的。
分享到:
评论

相关推荐

    javaMD5加密算法

    基于MD5的加密算法,包括如何使用的例子,很好的实例。

    MD5加密算法.java

    MD5加密算法.javaMD5加密算法.java

    javaMD5.rar javaMD5加密

    Java MD5 加密是一种在Java编程环境中广泛使用的哈希函数技术,主要用于数据的校验和以及简单的...在提供的"javaMD5.rar"压缩包中,可能包含了具体的代码示例和详细注释,可以帮助你更好地理解和应用Java中的MD5加密。

    JavaMD5加密工具类

    JavaMD5加密工具类是Java编程中用于实现数据安全存储的一种常见方法,主要涉及到的是MD5(Message-Digest Algorithm 5)散列算法的应用。MD5是一种广泛使用的密码学哈希函数,它能够将任意长度的数据转化为固定长度...

    javamd5加密工具类

    `javamd5加密工具类`通常是指一个Java类库,提供MD5加密的功能。在描述中提到了几个关键步骤: 1. **解压**:这可能指的是下载了一个包含MD5加密功能的压缩文件,需要先进行解压操作,通常使用的是像WinRAR或7-Zip...

    java实现MD5加密解密算法

    java实现MD5加密解密算法,java源代码~

    javaMD5加密小例子

    2. **创建MessageDigest实例**:首先,我们需要创建一个`MessageDigest`实例,指定为MD5算法。这可以通过调用`getInstance("MD5")`方法完成。 ```java MessageDigest md = MessageDigest.getInstance("MD5"); ``` ...

    java实现Md5加盐加密算法

    对接接口时用到的一种常用加密算法,常用于验证签名,使用shiro-all-1.4.1.jar,可自行下载

    java实现md5 加密解密

    java实现md5 加密解密(在网络中MD5是著名的不可逆算法,但是如果...则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配; 匹配成功,表示找到明文;但是此程序的时间耗费较高!仅提供一个解密的方法!)

    三种语言md5加密算法

    在IT行业中,MD5加密算法在以下几个方面扮演着重要角色: 1. **数据校验**:当传输或存储文件时,可以通过计算文件的MD5摘要来验证文件是否在传输过程中被篡改。如果源文件和接收文件的MD5值匹配,则表明文件完整...

    JavaMd5混合加密

    2. **混合加密**:为了增加安全性,开发者通常会采用其他加密算法与MD5结合,例如AES(Advanced Encryption Standard)、DES(Data Encryption Standard)或RSA等。这可能包括将MD5哈希值作为密钥或与其他密钥一起...

    MD5加密+签名算法Sign生成 工具类

    在Java或其他编程语言中,我们经常使用如RSA、DSA等非对称加密算法进行签名操作。 这个"MD5加密+签名算法Sign生成工具类"是为开发者提供的一种便利,避免了手动编写复杂的加密和签名逻辑。它可能包含以下功能: 1....

    javaMD5密码加密,不能解密

    javaMD5加密,通过算法,将密码加密成56位的密文,但不能解密。。。。。。。。。。。。。。。。。。。。。。。。。

    java工具类 MD5加密

    java开发工具类MD5加密算法-静态单例。

    javaMD5加密

    通过对`MD5`类的深入分析,我们不仅了解了MD5算法的核心概念和流程,还学会了如何在实际项目中使用此类进行数据加密。尽管MD5已不再适用于安全性要求极高的场景,但在许多日常开发工作中,它依然发挥着重要作用。

    MD5java加密算法

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要应用于信息安全领域,用于对数据进行单向加密,生成固定长度的摘要值。在Java中,MD5被用作一种...在实际开发中,应结合具体需求选择合适的加密算法。

    javamd5.jar

    java实现的MD5加密算法class类文件,可与4GL串并改进用户密码加密算法!

    java中md5加密技术

    总之,Java中的MD5加密技术为数据提供了基础的安全保障,但鉴于其已知的弱点,应结合其他更安全的加密算法或机制,如SHA系列,或者使用更先进的密码学技术。在实际应用中,还需要考虑合规性和安全策略,确保数据的...

    JAVA MD5加密例子

    在Java中,我们可以利用`java.security.MessageDigest`类来实现MD5加密。下面我们将详细介绍MD5加密在Java中的应用及其原理。 MD5算法的基本思想是将任意长度的输入(又叫做预映射pre-image)通过一系列的数学运算...

Global site tag (gtag.js) - Google Analytics