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


BC实现
public static void BCSHA1(String str) throws NoSuchAlgorithmException {Digest digest = new SHA1Digest();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的SHA1摘要:"+new String(org.bouncycastle.util.encoders.Hex.toHexString(enStr)));}
CC实现
public static void CCSHA1(String str){String enStr = DigestUtils.sha1Hex(BASE_STRING.getBytes());System.out.println("C C的SHA1摘要:"+enStr);}
BC单独实现
public static void BCSHA224(String str) throws NoSuchAlgorithmException {Digest digest = new SHA224Digest();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的SHA224摘要:"+new String(org.bouncycastle.util.encoders.Hex.toHexString(enStr)));}
JDK实现与BC配合实现
public static void jdkAndBCSHA224(String str) throws NoSuchAlgorithmException {Security.addProvider(new BouncyCastleProvider());MessageDigest messageDigest = MessageDigest.getInstance("SHA224");byte[] enStr = messageDigest.digest(str.getBytes());//将二进制转换为16禁止输出System.out.println("JDK+BC的SHA224摘要:"+new String(Hex.encodeHex(enStr)));}
调用
public static void main(String[] args) throws NoSuchAlgorithmException {jdkSHA1(BASE_STRING);BCSHA1(BASE_STRING);CCSHA1(BASE_STRING);BCSHA224(BASE_STRING);jdkAndBCSHA224(BASE_STRING);}
结果
JDK的SHA1摘要:
B C的SHA1摘要:
C C的SHA1摘要:
B C的摘要 :
JDK+BC的摘要:
MAC 加秘钥的摘要算法
JDK实现
public static void jdkHmacMD5(String str) throws Exception {//初始化 KeyGeneratorKeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//生成秘钥SecretKey secretKey = keyGenerator.generateKey();//获取秘钥byte[] key = secretKey.getEncoded();//还原秘钥SecretKeySpec secretKeySpec = new SecretKeySpec(key, "HmacMD5");//获取mac实例 初始化MACMac mac = Mac.getInstance(secretKeySpec.getAlgorithm());mac.init(secretKey);//执行摘要算法byte[] encBytes = mac.doFinal(str.getBytes());System.out.println(Hex.toHexString(encBytes));}
BC实现
public static void BCHmacMD5(String str){HMac hMac = new HMac(new MD5Digest());hMac.init(new KeyParameter(Hex.decode("aaaaaaaaaa")));hMac.update(str.getBytes(),0,str.getBytes().length);byte[] hmacMD5 = new byte[hMac.getMacSize()];hMac.doFinal(hmacMD5,0);System.out.println(Hex.toHexString(hmacMD5));}
3.对称加密算法(-key ) 对称加密算法(-key )简介
对称加密算法是应用较早的加密算法 , 技术成熟 。在对称加密算法中 , 数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后 , 使其变成复杂的加密密文发送出去 。收信方收到密文后 , 若想解读原文 , 则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密 , 才能使其恢复成可读明文 。在对称加密算法中 , 使用的密钥只有一个 , 发收信双方都使用这个密钥对数据进行加密和解密 , 这就要求解密方事先必须知道加密密钥 。
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法 。有时又叫传统密码算法 , 就是加密密钥能够从解密密钥中推算出来 , 同时解密密钥也可以从加密密钥中推算出来 。而在大多数的对称算法中 , 加密密钥和解密密钥是相同的 , 所以也称这种加密算法为秘密密钥算法或单密钥算法 。它要求发送方和接收方在安全通信之前 , 商定一个密钥 。对称算法的安全性依赖于密钥 , 泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密 , 所以密钥的保密性对通信的安全性至关重要 。