Java中加密算法介绍及其实现( 二 )

import org.bouncycastle.util.encoders.Base64;public class BCBase64 {private static final String BASE_STRING ="security base64";public static void main(String[] args) {System.out.println("原始字符串: " + BASE_STRING);byte[] encStr = Base64.encode(BASE_STRING.getBytes());System.out.println("Base64编码后: " + new String(encStr));String deStr = new String(Base64.decode(encStr));System.out.println("Base64解码后: "+deStr);}}
BC的调用代码相较于CC和JDK更少了 。
2.消息摘要算法(- )及其实现 MD算法简介
消息摘要算法的主要特征是加密过程不需要密钥 , 并且经过加密的数据无法被解密 , 只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文 。消息摘要算法不存在密钥的管理与分发问题 , 适合于分布式网络上使用 。由于其加密计算的工作量相当巨大 , 所以以前的这种算法通常只用于数据量有限的情况下的加密 , 例如计算机的口令就是用不可逆加密算法加密的 。近年来 , 随着计算机性能的飞速改善 , 加密速度不再成为限制这种加密技术发展的桎梏 , 因而消息摘要算法应用的领域不断增加 。
消息摘要算法主要应用在数字签名领域 , 作为对明文的摘要算法 。著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体 。
特点:单向加密 , 长度统一
MD算法实现
一般的加密算法实现通过两个包实现
JDK:java.
BC:
1.MD2
public static void jdkMD2(String str) throws NoSuchAlgorithmException {MessageDigest messageDigest = MessageDigest.getInstance("MD2");byte[] enStr = messageDigest.digest(str.getBytes());//将二进制转换为16进制输出System.out.println("JDK的MD2摘要:"+new String(Hex.encodeHex(enStr)));}
2.MD4
public static void BCMD4(String str) throws NoSuchAlgorithmException {Digest digest = new MD4Digest();byte[] b = str.getBytes();digest.update(b,0,b.length);byte[] enStr = new byte[digest.getDigestSize()];digest.doFinal(enStr,0);//将二进制转换为16禁止输出System.out.println("B C的MD4摘要:"+new String(org.bouncycastle.util.encoders.Hex.toHexString(enStr)));}
3.MD5
BC实现
public static void BCMD5(String str) throws NoSuchAlgorithmException {Digest digest = new MD5Digest();byte[] b = str.getBytes();digest.update(b,0,b.length);byte[] enStr = new byte[digest.getDigestSize()];digest.doFinal(enStr,0);//将二进制转换为16禁止输出System.out.println("B C的MD5摘要:"+new String(org.bouncycastle.util.encoders.Hex.toHexString(enStr)));}
JDK实现
public static void jdkMD5(String str) throws NoSuchAlgorithmException {MessageDigest messageDigest = MessageDigest.getInstance("MD5");byte[] enStr = messageDigest.digest(str.getBytes());//将二进制转换为16进制输出System.out.println("JDK的MD5摘要:"+Hex.encodeHex(enStr));}
调用
public static void main(String[] args) throws NoSuchAlgorithmException {BCMD4(BASE_STRING);BCMD5(BASE_STRING);jdkMD2(BASE_STRING);jdkMD5(BASE_STRING);}
结果
B C的MD4摘要:
B C的MD5摘要:
JDK的MD2摘要:
JDK的MD5摘要:
4.SHA
一般的加密算法实现通过两个包实现
JDK:java.
BC:
CC一般是对JDK简化操作
SHA-1
JDK实现
public static void jdkSHA1(String str) throws NoSuchAlgorithmException {MessageDigest messageDigest = MessageDigest.getInstance("SHA");byte[] enStr = messageDigest.digest(str.getBytes());//将二进制转换为16进制输出System.out.println("JDK的SHA摘要:"+new String(Hex.encodeHex(enStr)));}