南昌航空大学信息安全试验4-MD5加密的Java实现

合集下载

南昌航空大学信息安全试验4-MD5加密的Java实现

南昌航空大学信息安全试验4-MD5加密的Java实现

南昌航空大学实验报告2014年3月27日课程名称:信息安全概论实验名称:MD5加密的Java实现班级:姓名:学号:指导老师评定:签名:一、实验目的通过实验了解MD5加密的原理,掌握Java语言MD5加密的实现。

二、实验原理1.哈希(Hash)函数的定义实现数字签名或计算消息的鉴别码。

以任意长度的消息作为输入,输出一个固定长度的二进制值,称为哈希值或消息摘要。

2.MD(Message Digest)消息摘要MD5对任意输入的消息计算一个128位的固定长度的值3.MD5的应用(1)用于校验下载的文件可用MD5校验工具软件计算,相当于文件的指纹,32位字母数字常用于软件下载网站网站:先计算文件的MD5值,然后和文件一起发布到网站上。

用户:下载文件后,计算文件的MD5值,和网站发布的MD5值核对。

(2)将用户密码加密后保存注册时:将用户的注册密码(P1)用MD5算法加密后(P2)保存到服务器数据库中;登录时:将用户的登录密码(P3)用MD5算法加密后(P4),与服务器数据库中的密文密码(P2)比较。

三、实验环境开发工具:JDK、Eclipse参考资料:JDK API文档java.security包MessageDigest类四、实验内容和任务使用Java语言编程,模拟注册和登录过程。

五、实验内容1.注册登录package t;import java.math.BigInteger;import java.security.MessageDigest;import java.util.Scanner;public class MD5{public static void main(String[]args){String password="";String account="";System.out.print("注册\n用户名:");Scanner inaccount=new Scanner(System.in);account=inaccount.nextLine();System.out.print("密码:");Scanner inpassword=new Scanner(System.in);password=inpassword.nextLine();password=makeMD5(password);String password2="";String account2="";System.out.print("\n\n登录\n用户名:");Scanner inaccount2=new Scanner(System.in);account2=inaccount2.nextLine();System.out.print("密码:");Scanner inpassword2=new Scanner(System.in);password2=inpassword2.nextLine();password2=makeMD5(password2);if(account.equals(account2)&&password.equals(password2)){System.out.println("登录成功!!!");System.out.println("密文:"+makeMD5(password));}else{System.out.println("登录失败!!!");}//System.out.println("密文:"+makeMD5(password));}public static String makeMD5(String password){MessageDigest md;try{//生成一个MD5加密计算摘要md=MessageDigest.getInstance("MD5");//计算md5函数md.update(password.getBytes());//digest()最后确定返回md5hash值,返回值为8为字符串。

java中常用的md5方法

java中常用的md5方法

java中常用的md5方法Java是一种广泛使用的编程语言,特别适合用于开发各种类型的应用程序。

在Java中,MD5(Message-Digest Algorithm 5)是一种常用的哈希算法,用于产生唯一的消息摘要。

本文将详细介绍在Java中常用的MD5方法。

第一步:导入相关的包使用MD5算法需要导入Java的Security包。

在代码的开头加上以下导入语句:import java.security.MessageDigest;第二步:创建一个方法在Java中,我们可以创建一个方法用于计算MD5消息摘要。

下面是一个示例:public static String getMD5(String input) {try {MessageDigest md =MessageDigest.getInstance("MD5"); 创建MD5加密对象byte[] messageDigest = md.digest(input.getBytes()); 获取二进制摘要值转化为十六进制字符串形式StringBuilder hexString = new StringBuilder();for (byte b : messageDigest) {String hex = Integer.toHexString(0xFF & b);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex);}return hexString.toString();} catch (Exception ex) {ex.printStackTrace();return null;}}第三步:调用方法要使用这个方法,只需在代码中调用getMD5()方法,并传递要进行MD5加密的消息作为参数。

以下是一个使用示例:String input = "Hello World";String md5Hash = getMD5(input);System.out.println("MD5加密后的结果:" + md5Hash);以上代码将输出:MD5加密后的结果:0a4d55a8d778e5022fab701977c5d840第四步:解释代码让我们来解释一下上面的代码。

java md5 加密原理

java md5 加密原理

java md5 加密原理Java MD5 加密原理:•MD5 是一种常用的数据加密算法,用于确保数据的完整性和安全性。

•在 Java 中,可以使用 MessageDigest 类来实现 MD5 加密算法。

•MessageDigest 类位于 java.security 包中,使用getInstance(“MD5”) 方法来获取 MessageDigest 的实例,再通过 update() 方法将要加密的数据写入 MessageDigest。

最后,调用 digest() 方法获得加密后的数据。

•MD5 加密的原理是通过对原数据进行多次组合和数据填充,然后通过处理数据块的方式生成 128 位的散列值,从而实现数据加密的目的。

•MD5 加密算法是一种单向加密算法,即加密过程无法逆转,只有通过暴力破解的方式进行破解。

•MD5 加密算法并不能保证数据的绝对安全,因为一旦攻击者获得了加密后的散列值,就可以通过字典、暴力破解等方式进行破解。

•因此,在实际应用中,为了保证数据的安全性,还需要采用其他的加密算法,如 AES、RSA 等。

总之,Java MD5 加密算法是一种常见的数据加密方式,采用多次组合和填充数据的方式生成 128 位散列值,实现数据的单向加密。

但是,如果要确保数据的绝对安全,还需要采用其他的加密算法来保护数据。

以下是 Java MD5 加密的一些特点和应用:•Java MD5 加密算法可以对任何长度的数据进行加密处理,生成固定长度的散列值。

•由于 MD5 加密算法是单向加密算法,因此无法对加密后的散列值进行解密,只能通过暴力破解的方式进行破解。

•在实际应用中,MD5 加密算法常用于密码加密、数字签名、数据完整性校验等方面。

•在密码加密方面,通常是将用户输入的密码进行 MD5 加密后存储在数据库中,比明文存储要更安全。

•由于 MD5 加密算法并不能保证数据的绝对安全,因此在进行数字签名和数据完整性校验时,通常还需要采用其他的加密算法进行保护。

javamd5加密和解密算法实例 -回复

javamd5加密和解密算法实例 -回复

javamd5加密和解密算法实例-回复Javamd5加密和解密算法实例在计算机领域中,数据的安全性是非常重要的。

为了保护数据免受未经授权的访问,数据通常需要进行加密。

MD5是一种常用的加密算法之一,它可以将数据转换为一串固定长度的密文。

在本文中,将详细介绍Java 中的MD5加密和解密算法的实例。

MD5(Message Digest algorithm 5)是一种单向加密算法,它将任意长度的数据块转换为固定长度的密文,通常为128位。

与传统的加密算法不同,MD5无法逆向解密,因此被广泛应用于密码存储和验证等领域。

在Java中,我们可以使用Java.security包中的MessageDigest类实现MD5加密和解密。

首先,我们需要确定要加密的数据,然后创建一个MessageDigest对象并将其初始化为使用MD5算法。

接下来,通过调用update()方法将数据传递给MessageDigest对象,并使用digest()方法获得加密后的结果。

下面是一个使用Java MD5算法加密的示例:javaimport java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Example {public static void main(String[] args) {String data = "Hello, World!";String encryptedData = encryptMD5(data);System.out.println("Encrypted data: " + encryptedData);}public static String encryptMD5(String data) {try {MessageDigest md =MessageDigest.getInstance("MD5");md.update(data.getBytes());byte[] encryptedBytes = md.digest();StringBuilder sb = new StringBuilder();for (byte b : encryptedBytes) {sb.append(String.format("02x", b & 0xff));}return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}}在上面的示例中,我们定义了一个名为MD5Example的类,其中包含了一个名为encryptMD5的静态方法。

MD5加密原理和Java实现

MD5加密原理和Java实现
MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210
当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。
将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量(文本中的一个子分组和一个常数)。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以一下是每次操作中用到的四个非线性函数(每轮一个)。
* final是表示了只读,切能在同一个进程空间内的多个Instance间共享
*/
static final int S11 = 7;
static final int S12 = 12;
static final int S13 = 17;
static final int S14 = 22;
static final int S21 = 5;
package encryption;
/**
* md5类实现了RSA Data Security, Inc.在提交给IETF的RFC1321中的MD5 message-digest算法。
**/
public class MD5Util {
/*
*下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define实现的,这里把它们实现成为static
MD5加密原理和Java实现

Java实现MD5加密的方法

Java实现MD5加密的方法

Java实现MD5加密的⽅法本⽂实例讲述了Java实现MD5加密的⽅法。

分享给⼤家供⼤家参考。

具体实现⽅法如下:import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5HashUtil{private MessageDigest md = null;private static MD5HashUtil md5 = null;private static final char[] hexChars ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};/*** Constructor is private so you must use the getInstance method*/private MD5HashUtil() throws NoSuchAlgorithmException{md = MessageDigest.getInstance("MD5");}/*** This returns the singleton instance*/public static MD5HashUtil getInstance()throws NoSuchAlgorithmException{if (md5 == null){md5 = new MD5HashUtil();}return (md5);}public static String hashCode(String dataToHash) throws NoSuchAlgorithmException{return getInstance().hashData(dataToHash.getBytes());}public static String hashCode(byte[] dataToHash) throws NoSuchAlgorithmException{return getInstance().hashData(dataToHash);}public String hashData(byte[] dataToHash) {return hexStringFromBytes((calculateHash(dataToHash))).toLowerCase();}private byte[] calculateHash(byte[] dataToHash){md.update(dataToHash, 0, dataToHash.length);return (md.digest());}public String hexStringFromBytes(byte[] b){String hex = "";int msb;int lsb = 0;int i;// MSB maps to idx 0for (i = 0; i < b.length; i++){msb = ((int)b[i] & 0x000000FF) / 16;lsb = ((int)b[i] & 0x000000FF) % 16;hex = hex + hexChars[msb] + hexChars[lsb];}return(hex);}public static void main(String args[]) throws NoSuchAlgorithmException{String string = "my name is zhangli";System.out.println(string);System.out.println(hashCode(string));}}如上代码为java语⾔实现md5加密算法,输出为加密后的密⽂!通常将加密后的密⽂保存在数据库中,如果需要⽐较只⽐较他们的⽤md5加密过后的密⽂。

java 标准的md5

java 标准的md5

java 标准的md5Java标准的MD5。

在Java编程中,MD5(Message Digest Algorithm 5)是一种广泛使用的加密算法,用于对数据进行加密和摘要处理。

MD5算法产生的摘要长度为128位,通常以32位十六进制数表示,它是一种不可逆的加密算法,即无法通过MD5摘要逆向推导出原始数据。

在本文中,我们将详细介绍Java标准的MD5算法的使用方法和相关注意事项。

首先,我们需要了解如何在Java中使用MD5算法对数据进行加密。

Java标准库中提供了java.security.MessageDigest类来实现MD5算法。

下面是一个简单的示例代码:```java。

import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Example {。

public static void main(String[] args) {。

String input = "Hello, MD5!";try {。

MessageDigest md = MessageDigest.getInstance("MD5");md.update(input.getBytes());byte[] digest = md.digest();StringBuffer sb = new StringBuffer();for (byte b : digest) {。

sb.append(String.format("%02x", b & 0xff));}。

System.out.println("MD5 hash: " + sb.toString());} catch (NoSuchAlgorithmException e) {。

《信息安全》实验报告3MD5的计算和破解

《信息安全》实验报告3MD5的计算和破解

《信息安全》实验报告3MD5的计算和破解实验目标:1.了解MD5算法的基本原理。

2.掌握MD5算法的计算和应用。

3.理解MD5算法的弱点,并尝试破解MD5哈希值。

一、实验原理:MD5(Message Digest Algorithm 5)是一种常用的消息摘要算法,用来确保数据的完整性和一致性,广泛应用于信息安全领域中。

MD5将任意长度的输入数据进行计算,得到一个128位的哈希值。

实验步骤:1.编写MD5的计算代码。

2.编写MD5的破解代码。

3.运行代码,计算给定字符串的MD5哈希值。

4.破解给定MD5哈希值。

二、实验过程:1.MD5的计算代码编写:MD5算法的计算过程包括四个主要的步骤:填充位、增加长度、初始化变量和循环计算。

a.填充位:将待计算的消息填充至512位的倍数,填充位为1后面加零。

b.增加长度:在填充消息后增加一个64位的二进制数,表示原始消息的长度。

c.初始化变量:设定固定的四个变量,用于循环计算。

d.循环计算:将填充后的消息分为512位的块进行循环计算,计算结果与前一块的结果进行累加。

2.MD5的破解代码编写:MD5的破解目标是通过已知的MD5哈希值,找到对应的原始数据。

一般的方法是尝试不同的输入数据,计算MD5哈希值,然后与已知的哈希值进行比较。

a.枚举法:通过不断尝试不同的输入数据,计算MD5哈希值与给定哈希值进行比较,直到找到对应的原始数据。

b.字典法:通过预先准备好的字典文件,将字典中的每个词进行MD5哈希计算,然后与给定哈希值进行比较,查找对应的原始数据。

3.实验结果展示:4.MD5的破解:a.枚举法:从'a'到'z'的26个字符中依次尝试,计算MD5哈希值并与给定值进行比较,直到找到对应的原始数据。

b.字典法:根据常见密码字典构建一个文本文件,逐行读取文件中的词进行MD5哈希计算并与给定值进行比较,直到找到对应的原始数据。

5.实验总结:实验中,我们通过计算MD5哈希值和尝试破解,深入了解了MD5算法的原理和应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌航空大学实验报告
2014年3 月27 日
课程名称:信息安全概论实验名称:MD5加密的Java实现
班级:姓名:学号:
指导老师评定:签名:
一、实验目的
通过实验了解MD5加密的原理,掌握Java语言MD5加密的实现。

二、实验原理
1.哈希(Hash)函数的定义
实现数字签名或计算消息的鉴别码。

以任意长度的消息作为输入,输出一个固定长度的二进制值,称为哈希值或消息摘要。

2.MD(Message Digest)消息摘要
MD5对任意输入的消息计算一个128位的固定长度的值
3.MD5的应用
(1)用于校验下载的文件
可用MD5校验工具软件计算,相当于文件的指纹,32位字母数字
常用于软件下载网站
网站:
先计算文件的MD5值,然后和文件一起发布到网站上。

用户:
下载文件后,计算文件的MD5值,和网站发布的MD5值核对。

(2)将用户密码加密后保存
注册时:
将用户的注册密码(P1)用MD5算法加密后(P2)保存到服务器数据库中;
登录时:
将用户的登录密码(P3)用MD5算法加密后(P4),与服务器数据库中的密
文密码(P2)比较。

三、实验环境
开发工具:JDK、Eclipse
参考资料:JDK API文档
java.security包
MessageDigest类
四、实验内容和任务
使用Java语言编程,模拟注册和登录过程。

五、实验内容
1.注册登录
package t;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Scanner;
public class MD5 {
public static void main(String[] args) {
String password="";
String account="";
System.out.print("注册\n用户名:");
Scanner inaccount = new Scanner(System.in);
account=inaccount.nextLine();
System.out.print("密码:");
Scanner inpassword = new Scanner(System.in);
password=inpassword.nextLine();
password=makeMD5(password);
String password2="";
String account2="";
System.out.print("\n\n登录\n用户名:");
Scanner inaccount2 = new Scanner(System.in);
account2=inaccount2.nextLine();
System.out.print("密码:");
Scanner inpassword2 = new Scanner(System.in);
password2=inpassword2.nextLine();
password2=makeMD5(password2);
if(account.equals(account2)&&password.equals(password2))
{
System.out.println("登录成功!!!");
System.out.println("密文:"+makeMD5(password));
}
else
{
System.out.println("登录失败!!!");
}
//System.out.println("密文:"+makeMD5(password));
}
public static String makeMD5(String password) {
MessageDigest md;
try {
// 生成一个MD5加密计算摘要
md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(password.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。

因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
String pwd = new BigInteger(1, md.digest()).toString(16);
//System.err.println(pwd);
return pwd;
} catch (Exception e) {
e.printStackTrace();
}
return password;
}
}
五、实验小结
通过本次实验实现了简单的注册,输入用户名和密码,把密码进行MD5加密后保存在变量里,并且登录时,输入用户名和密码,把密码进行MD5加密后,和注册时保存的用户名和密码比较,能够判断是否登录成功。

相关文档
最新文档