java sha256做摘要_Java 常見摘要算法——md5、sha1、sha256

本文介绍了Java中实现MD5和SHA1摘要算法的三种方式:使用JDK内置方法、bouncy castle库(bc)以及Apache Commons Codec库(cc)。通过比较和示例代码展示了每种方式的用法,可用于数据加密和验证数据完整性。
摘要由CSDN通过智能技术生成

目錄

實現sha256的代碼和sha1的代碼相似

摘要算法簡介

摘要算法,也是加密算法的一種,還有另外一種叫法:指紋。摘要算法就是對指定的數據進行一系列的計算,然后得出一個串內容,該內容就是該數據的摘要。不同的數據產生的摘要是不同的,所以,可以用它來進行一些數據加密的工作:通過對比兩個數據加密后的摘要是否相同,來判斷這兩個數據是否相同。

還可以用來保證數據的完整性,常見的軟件在發布之后,會同時發布軟件的md5和sha值,這個md5和sha值就是軟件的摘要。當用戶將軟件下載之后,然后去計算軟件的摘要,如果計算所得的摘要和軟件發布方提供的摘要相同,則證明下載的軟件和發布的軟件一模一樣,否則,就是下載過程中數據(軟件)被篡改了。

常見的摘要算法包括:md、sha這兩類。md包括md2、md4、md5;sha包括sha1、sha224、sha256、sha384、sha512。

md5

md摘要算法包括多種算法:分別是md2、md4、md5。現在一般都是使用md5進行加密。

Java中實現md5加密,有三種方式:

使用jdk內置的方法實現實現md5加密

package cn.ganlixin.security;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.binary.Hex;

public class JdkMD5 {

public static void main(String[] args) throws NoSuchAlgorithmException {

String plainText = "this is plain text";

// 通過調用MessageDigest(數據摘要類)的getInstance()靜態方法,傳入加密算法的名稱,獲取數據摘要對象。

//MessageDigest MessageDigest.getInstance(algorithm);

MessageDigest messageDigest = MessageDigest.getInstance("MD5");

// 獲取摘要(加密),結果是字節數組

// byte[] java.security.MessageDigest.digest(byte[] input)

byte[] ciphertext = messageDigest.digest(plainText.getBytes());

// 利用apache的commons-codec,將字節數組轉換為十六進制。

System.out.println(Hex.encodeHexString(ciphertext));

}

}

使用bc方式實現md5加密

這種方式需要下載bc的jar包,bc是bouncycastle的縮寫。

package cn.ganlixin.security;

import java.security.NoSuchAlgorithmException;

import org.bouncycastle.crypto.digests.MD5Digest;

import org.bouncycastle.util.encoders.Hex;

public class BcMD5 {

public static void main(String[] args) throws NoSuchAlgorithmException {

String plainText = "this is plain text";

// 直接創建一個MD5Digest對象(bouncycastle的)

MD5Digest md5Digest = new MD5Digest();

md5Digest.update(plainText.getBytes(), 0, plainText.getBytes().length);

// 獲取這種加密方式在加密之后,字節數組的長度

byte[] cipherBytes = new byte[md5Digest.getDigestSize()];

md5Digest.doFinal(cipherBytes, 0);

// 使用bc自己的hex類將字節數組轉換為十六進制

String cipherStr = Hex.toHexString(cipherBytes);

System.out.println(cipherStr);

}

}

使用Cc方式實現md5加密

Cc,是commons.codec的簡寫,需要下載apache-commons-codec的jar包。

cc方式實現md5加密,其實是對jdk實現md5加密進行了封裝和簡化操作,從下面的代碼量和可讀性就可以看出來,cc方式實現md5加密很方便。

package cn.ganlixin.security;

import org.apache.commons.codec.digest.DigestUtils;

public class CcMD5 {

public static void main(String[] args) {

String plainText = "this is plain text";

// cc方式是使用codec中的DigestUtils工具類

/*

對於md5加密來說,DigestUtils提供了6個靜態方法

byte[] DigestUtils.md5(byte[] data)

byte[] DigestUtils.md5(InputStream is)

byte[] DigestUtils.md5(String data)

String DigestUtils.md5Hex(byte[] data)

String DigestUtils.md5Hex(InputStream is)

String DigestUtils.md5Hex(String data)

*/

// 實現md5加密只需要一行代碼

String cipherText = DigestUtils.md5Hex(plainText);

System.out.println(cipherText);

}

}

sha1

sha類加密算法有多種,共兩大類,一類是sha1,另一類包含多種加密算法:sha224、sha256、sha384、sha512,這些統稱為sha2。

其中sha1加密后的長度是160byte,sha2加密之后的密文長度和shaXxx的數字相同,比如sha256加密之后,密文長度為256byte。

使用jdk內置方法實現sha1加密

package cn.ganlixin.security;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.binary.Hex;

public class JDKSHA1 {

public static void main(String[] args) throws NoSuchAlgorithmException {

String plainText = "this is plain Text";

// 獲取指定摘要算法的messageDigest對象

MessageDigest messageDigest = MessageDigest.getInstance("SHA"); // 此處的sha代表sha1

// 調用digest方法,進行加密操作

byte[] cipherBytes = messageDigest.digest(plainText.getBytes());

String cipherStr = Hex.encodeHexString(cipherBytes);

System.out.println(cipherStr);

}

}

使用bc方式實現sha1加密

package cn.ganlixin.security;

import org.bouncycastle.crypto.Digest;

import org.bouncycastle.crypto.digests.SHA1Digest;

import org.bouncycastle.util.encoders.Hex;

public class BcSHA1 {

public static void main(String[] args) {

String plainText = "this is plain Text";

Digest digest = new SHA1Digest();

digest.update(plainText.getBytes(), 0, plainText.getBytes().length);

// 創建保存摘要的字節數組

byte[] cipherBytes = new byte[digest.getDigestSize()];

digest.doFinal(cipherBytes, 0);

String cipherText = Hex.toHexString(cipherBytes);

System.out.println(cipherText);

}

}

使用cc方式實現sha1加密

cc方式實現sha1加密,超級簡單,和實現md5加密一樣,一行代碼即可。

package cn.ganlixin.security;

import org.apache.commons.codec.digest.DigestUtils;

public class CcSHA1 {

public static void main(String[] args) {

String cipherText = DigestUtils.sha1Hex("this is plain Text");

System.out.println(cipherText);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值