Java加密解密相关

来源:互联网 发布:大浦洞导弹 知乎 编辑:程序博客网 时间:2024/05/20 07:50


关于解释加密解密中的填充方案:

http://laokaddk.blog.51cto.com/368606/461279/


关于对称加密中的反馈模式:

http://blog.csdn.net/aaaaatiger/article/details/2525561


:写法为:

DES/CBC/PKCS5Padding
各种加密算法的加密解密写法:已有DES,MD5,SHA(未结束)
package com.qin.test;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.math.BigInteger;import java.security.InvalidKeyException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.spec.InvalidKeySpecException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;public class Main {public static void main(String[] args) throws InvalidKeyException,NoSuchAlgorithmException, InvalidKeySpecException,IllegalBlockSizeException, BadPaddingException,NoSuchPaddingException, IOException {Main m = new Main();// m.desJie(m.desJia());// m.createMD5Code();m.createSHACode();}/********************************************************************************* * 对称DES加密解密 DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。 * DES算法的入口参数有三个 * :Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据; * Mode为DES的工作方式,有两种:加密或解密。 */private String desKey = "12345678";// des加密key必须为8位长度public byte[] desJia() throws InvalidKeyException,NoSuchAlgorithmException, InvalidKeySpecException,NoSuchPaddingException, IllegalBlockSizeException,BadPaddingException {// 因为普通的Random是线性可预测的,安全性不高,而这个安全性比较高SecureRandom s = new SecureRandom();// 创建Deskey对象DESKeySpec DESKey = new DESKeySpec(desKey.getBytes());// 创建DES密钥工厂SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 使用密钥工厂来生成符合规范的密钥对象SecretKey secretKey = keyFactory.generateSecret(DESKey);// 进行实际的加密Cipher c = Cipher.getInstance("DES/ECB/PKCS5Padding");// 初始化c.init(Cipher.ENCRYPT_MODE, secretKey, s);// 开始加密byte[] b = c.doFinal("我是加密的内容".getBytes());for (byte bb : b) {System.out.println("" + bb);}return b;}public void desJie(byte[] neirong) throws InvalidKeyException,NoSuchAlgorithmException, InvalidKeySpecException,IllegalBlockSizeException, BadPaddingException,NoSuchPaddingException {// 因为普通的Random是线性可预测的,安全性不高,而这个安全性比较高SecureRandom s = new SecureRandom();// 创建Deskey对象DESKeySpec DESKey = new DESKeySpec(desKey.getBytes());// 创建DES密钥工厂SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 使用密钥工厂来生成符合规范的密钥对象SecretKey secretKey = keyFactory.generateSecret(DESKey);// 进行实际的解密Cipher c = Cipher.getInstance("DES/ECB/PKCS5Padding");// 初始化c.init(Cipher.DECRYPT_MODE, secretKey, s);// 开始解密byte[] hehe = c.doFinal(neirong);System.out.println(new String(hehe));}/********************************************************************************************* * MD5消息摘要算法 MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。 * 相同的内容会产生相同的md5值 *  */public void createMD5Code() throws NoSuchAlgorithmException, IOException {MessageDigest md5 = MessageDigest.getInstance("MD5");File f = new File("D:\\bb.txt");// 验教文件的md5值FileInputStream fileInputStream = new FileInputStream(f);byte[] bytes = new byte[256];int len = -1;while ((len = fileInputStream.read(bytes)) > -1) {md5.update(bytes, 0, len);}fileInputStream.close();byte[] md5Code = md5.digest();System.out.println("我的" + f.getName() + " md5 :"+ new BigInteger(1, md5Code).toString(16));}/** * SHA类似MD5,不过产生的长度比md5长 */public void createSHACode() throws NoSuchAlgorithmException, IOException {MessageDigest md5 = MessageDigest.getInstance("SHA");File f = new File("D:\\bb.txt");// 验教文件的SHA值FileInputStream fileInputStream = new FileInputStream(f);byte[] bytes = new byte[256];int len = -1;while ((len = fileInputStream.read(bytes)) > -1) {md5.update(bytes, 0, len);}fileInputStream.close();byte[] md5Code = md5.digest();System.out.println("我的" + f.getName() + " SHA :"+ new BigInteger(1, md5Code).toString(16));}}

0 0
原创粉丝点击