`

单向加密

阅读更多

单向加密又称为不可逆加密算法,在加密过程中不使用密钥,明文由系统加密处理成密文,密文无法解密。一般适合于验证,在验证过程中,重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新认证。广泛使用于口令加密。

该算法有如下特点:

1.对同一消息反复执行加密得到相同的密文。

2.加密算法生成的密文不可预见,根明文没任何关系。

3.明文的任何微小的变化都会对密文产生很大影响。

4.不可逆,即不能通过密文获取明文。

 

比较流行的加密算法:MD5和SHA。

 

MD5:MessageDigest Algorigthm 5(信息摘要算法),MD5被广泛应用于各种软件密码认证和钥匙识别,如软件序列号。

 

Java使用MD5加密:

package com.security.example.example3;

 

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

 

public class EncrypWithMD5 {

 

/**

* @param args

*/

public static void main(String[] args) {

// 要加密的字符串

String msg = "java安全编程之单向加密MD5";

System.out.println("原文是:" + msg);

MessageDigest md;

try {

md = MessageDigest.getInstance("MD5");

md.update(msg.getBytes());

byte[] encrypMsg = md.digest();

System.out.println("加密后是:" + new String(encrypMsg));

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

}

 

输出:

原文是:java安全编程之单向加密MD5

加密后是:斧A蒮X2_娂弒懠抯

 

反复执行得到的密文都是这个。

MD5比较广泛的应用于口令管理,用户在注册后密码被经过MD5加密后保存在数据库,这样即使是数据库管理员也没法知道密码是什么。

用户登陆系统的时候,系统将用户的密码经过MD5加密与数据库中保存的密文对比,一致则通过,这样就能保证在不知道用户密码的情况下验证用户的合法性。

 

 

SHA:安全散列算法(Secure Hash Algorithm),对长度不超过264位的二进制消息产生160位的消息摘要输出。

 

Java使用SHA算法加密:

package com.security.example.example3;

 

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

 

public class EncrypWithSHA {

 

/**

* @param args

*/

public static void main(String[] args) {

// 要加密的字符串

String msg = "java安全编程之单向加密SHA";

System.out.println("原文是:" + msg);

MessageDigest md;

try {

md = MessageDigest.getInstance("SHA");

md.update(msg.getBytes());

byte[] encrypMsg = md.digest();

System.out.println("加密后是:" + new String(encrypMsg));

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

 

}

输出:

原文是:java安全编程之单向加密SHA

加密后是:Z�Vm川V1穽R__fuK挪

反复允许,结果也一样。

 

 

Java实现消息验证码

单向加密算法生成的消息摘要可以验证数据完整性。但是,如果数据在传输过程中被窃取者窃取,修改消息并重新生成摘要,将改过的数据和摘要一起发送给接收者,那这样接收者是无法判断数据是否被修改过。因为接收者根据接收到的消息产生的摘要与窃取者提供的消息摘要一致。那么,为了数据安全性,就需要知道发送方的身份,消息验证码一定程度上可以提供此功能(MAC)。

MAC:消息验证码(Message Authentication Code,MAC)。

MAC 基于秘密密钥提供一种方式来检查在不可靠介质上进行传输或存储的信息的完整性。通常,消息验证码在共享秘密密钥的两个参与者之间使用,以验证这两者之间传输的信息。

基于加密哈希函数的 MAC 机制也叫作 HMAC。结合秘密共享密钥,HMAC 可以用于任何加密哈希函数(如 MD5 或 SHA-1)。

生成摘要时,发送方和接受方拥有相同的密钥,可以通过对称算法生成事先被双方所有。

 

Java实现消息验证码:

package com.security.example.example3;

 

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

 

import javax.crypto.KeyGenerator;

import javax.crypto.Mac;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

 

public class MAC {

 

public static void main(String[] args) {

try {

// 要加密的文本

String msg = "Java安全编程——实现消息验证码";

System.out.println("原文:" + msg);

Mac mac = Mac.getInstance("HMACMD5");

// 用给定的密钥初始化此 Mac 对象。

// SecretKeySpecKey的实现类之一

// 如何构造SecretKeySpec?

// SecretKeySpec(byte[] key,String algorithm),key:密钥的密钥内容(原始密钥)algorithm:算法

// 怎么得到密钥?KeyGenerator

// 使用DES算法得到计算验证码的密钥

KeyGenerator kg = KeyGenerator.getInstance("DES");

// 对称密钥

SecretKey sk = kg.generateKey();

// 原始密钥

byte[] encodedMsg = sk.getEncoded();

 

SecretKeySpec sks = new SecretKeySpec(encodedMsg,"HMACMD5");

// 用给定的密钥初始化

mac.init(sks);

// 处理给定的字节数组

mac.update(msg.getBytes());

 

// 计算验证码(完成MAC

byte[] encrypMsg = mac.doFinal();

System.out.println("密文:" + new String(encrypMsg));

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvalidKeyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

 

重复执行得到的密文都不一样,因为每次DES生成的密钥不一样。

实际中,DES密钥保存在文件或数据库中,每次从中取出这样保证得到的结果是一样的。得不到密钥,当然也没法生成正确的消息验证码。

分享到:
评论

相关推荐

    单向加密算法的Java实现

    【单向加密算法在Java中的实现】 在信息技术领域,单向加密算法,也称为哈希函数或散列函数,是一种将任意长度的数据转化为固定长度输出的算法。这种转化过程是不可逆的,也就是说,一旦数据经过哈希处理,无法通过...

    vb 密码单向加密算法.rar

    单向加密算法,也称为散列函数或哈希函数,它具有不可逆性,即不能通过加密后的结果推导出原始输入信息。这样的特性使得单向加密成为存储密码的理想选择,因为即使数据泄露,攻击者也无法轻易地还原成原始密码。 VB...

    单向加密算法加密算法

    MD5 C#

    MD5单向加密,加密后无法解密

    MD5单向加密,加密后无法解密。。。。。。。。。。

    VB MD5 单向加密源码

    VB MD5 单向加密源码是用于在Visual Basic编程环境中实现MD5(Message-Digest Algorithm 5)加密算法的代码资源。MD5是一种广泛使用的哈希函数,它能够将任意长度的数据转换为固定长度的128位(16字节)摘要,通常用...

    MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐

    MD5加密单向加密算法加密速度快,不需要秘钥,最好加盐

    基于python语言和MySQL的学籍管理系统源码+项目说明(高分课程设计)(使用了hash函数单向加密等密码学技术).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、...基于python语言和MySQL的学籍管理系统源码+项目说明(高分课程设计)(使用了hash函数单向加密等密码学技术).zip

    基于python+MySQL实现高校学籍管理系统功能齐全,使用了hash函数单向加密等密码学技术课程设计(源码+课设报告)

    【作品名称】:基于python+MySQL实现的,针对老师、学生、管理员用户,功能齐全,使用了hash函数单向加密等密码学技术。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、...

    (最新)解密单向加密公式的公式管理器V6.00

    把“TCalc.dll”公式管理器替换原来目录下的同名文件,可以正常使用,不过要管理器版本号相同才行,否则...点击加密公式,点确定就可以看到单向加密的密码,再返回原来加密那输入密码就可以解开公式,看到原创作者加密的源码.

    C#加密解密DeEncryptHelper.zip

    单向加密 SHA1 单向加密 DES 双向,可解密 加密字符串 加密字符串 密钥为系统默认 加密文件 解密字符串 解密文件 128位MD5算法加密字符串 128位MD5算法加密Byte数组 32位MD5加密 Base64加密 Base64解密 DES加密/解密...

    Java实现常用加密算法——单向加密算法MD5和SHA

    在Eclipse IDE中关联JDK源码可以帮助开发者更深入地理解MD5和SHA单向加密算法在Java中的实现。具体来说,可以解压JDK的src.zip目录到指定位置,并下载OpenJDK的源代码来补充那些不在src.zip中的类文件,例如sun....

    单向加密就是用同一个密钥去加密和解密

    工作模式:ECB/CBC 默认情况下iOS是CBC的,我提供的例子是ECB的的工作模式,所以iOS在设置加密参数的时候要添加参数 kCCOptionECBMode

    Java 详解单向加密--MD5、SHA和HMAC及简单实现实例

    Java中的单向加密技术主要包括MD5、SHA以及HMAC,这些算法主要用于数据的完整性校验和安全性保护。下面我们将详细探讨这些加密算法及其在Java中的实现。 首先,MD5(Message-Digest Algorithm 5)是一种广泛应用的...

    Vue-常用加密(MD5,DES,SHA256,BASE64,SHA1,RSA)

    发送者将明文通过单向加密算法加密生成定长的密文串,然后将明文和密文串传递给接收方。接收方在收到报文后,将解明文使用相同的单向加密算法进行加密,得出加密后的密文串。随后与发送者发送过来的密文串进行对比,...

    MD5加密算法

    MD5就是采用单向加密的加密算法,对于MD5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。前者的意思是不可能有...

    java加密解密方法大全

    单向加密算法又称哈希函数,它将任意长度的明文数据映射为固定长度的密文(哈希值),这个过程是不可逆的,意味着无法从哈希值推导出原始数据。单向加密算法常用于验证数据的完整性和一致性。由于其不可逆性,它不...

    使用python语言和MySQL实现学籍管理系统,针对老师、学生、管理员用户,功能齐全,使用了hash函数单向加密等密码学技

    (1) 目的 1. 通过数据库课程设计,来进一加深对数据库开发与应用的了解,掌握sql语句与sql服务的要领,从而达到让我们实践的目的。 2. 首先查阅书籍可以知道数据库课程设计数据库系统开发步骤的要领有:需求分析,...

    加密处理使密码更安全[CFS编码加密

    本文将介绍一种名为"CFS编码加密"的方法,它是一种单向加密算法,用于保护存储在数据库中的密码。 "CFS编码加密"是由ASP技术广场开发的一种独特的加密方法,不同于常见的加密技术。它的特点是加密后的字符串与原始...

    Java加密解密方法大全

    本文详细介绍了Java加密解密的相关概念和技术,包括对称加密算法、非对称加密算法和单向加密算法的特点及其应用场景。通过对这些基本概念的理解,可以帮助开发人员更好地选择合适的加密方案来保护敏感数据。在实际...

Global site tag (gtag.js) - Google Analytics