ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AES加解密字符串和DES加解密文件例子

2021-01-16 17:30:29  阅读:185  来源: 互联网

标签:AES String DES 加解密 Cipher new import byte data


AES加解密字符串示例

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
 * Created by pengfei.wang on 2021/1/14
 * Describe: 字符串加解密工具类
 */
public class AESUtil {

    // 密匙
    private static final String KEY = "111111111";
    // 偏移量
    private static final String OFFSET = "11111";
    // 编码
    private static final String ENCODING = "UTF-8";
    //算法
    private static final String ALGORITHM = "AES";
    // 默认的加密算法
    private static final String CIPHER_ALGORITHM = "AES/CBC/ZeroBytePadding";


    /**
     * 加密
     *
     * @param data
     * @return String
     * @throws Exception
     * @author tyg
     * @date 2018年6月28日下午2:50:35
     */
    public static String encrypt(String data) throws Exception {
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes("ASCII"), ALGORITHM);
        IvParameterSpec iv = new IvParameterSpec(OFFSET.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(data.getBytes(ENCODING));
        return new String(encrypted, ENCODING).trim();
    }

    /**
     * 解密
     *
     * @param data
     * @return String
     * @throws Exception
     * @author tyg
     * @date 2018年6月28日下午2:50:43
     */
    public static String decrypt(String data) throws Exception {
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes("ASCII"), ALGORITHM);
        IvParameterSpec iv = new IvParameterSpec(OFFSET.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] buffer = ParseSystemUtil.parseHexStr2Byte(data);//16进制字符串变成2进制数组
        byte[] encrypted = cipher.doFinal(buffer);
        return new String(encrypted,ENCODING).trim();
    }
}

DES加解密文件示例

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
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;

 /**
 * Created by pengfei.wang on 2021/1/14
 * Describe: 解密文件工具类
 */
public class ObedienceEncryTools {

    private static Cipher cipher;

    /**
     * DES加密算法
     *
     * @param secretKey 密钥
     * @param mode      模式: 加密,解密
     * @param data      需要加密的内容
     * @return 将内容加密后的结果也是byte[]格式的
     */
    public static byte[] des(String secretKey, int mode, byte[] data) {
        byte[] keyByte = secretKey.getBytes();
        byte[] ret = null;
        //加密的内容存在并且密钥存在且长度为8个字节
        if (data != null
                && data.length > 0
                && keyByte != null
                && keyByte.length == 8) {
            try {
                if (cipher == null) {
                    cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//解密算法
                }
                DESKeySpec keySpec = new DESKeySpec(keyByte);
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//解密方式
                SecretKey key = keyFactory.generateSecret(keySpec);
                //根据加密方式这里添加偏移量
                /* IvParameterSpec paramSpec = new IvParameterSpec("偏移量".getBytes());
                cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);*/
                cipher.init(mode, key);
                ret = cipher.doFinal(data);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                e.printStackTrace();
            } catch (BadPaddingException e) {
                e.printStackTrace();
            } catch (InvalidKeySpecException e) {
                e.printStackTrace();
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            }
        }
        return ret;
    }

    //DES 加密
    public static byte[] desEncrypt(String key, byte[] data) {
        return des(key, Cipher.ENCRYPT_MODE, data);
    }

    //DES 解密
    public static byte[] desDecrypt(String key, byte[] data) {
        return des(key, Cipher.DECRYPT_MODE, data);
    }
}

public static String TestDecode(String secretKey,String filePath,String targetPath){
        FileInputStream inputStream = null;
        try {
            File keyValueFile = new File(filePath);
            File targetFile = new File(targetPath);
         
            RandomAccessFile keyValueAccess = new RandomAccessFile(keyValueFile, "r");
            byte[] keyValueBuffer = new byte[(int) keyValueFile.length()];
            keyValueAccess.read(keyValueBuffer);
            byte[] decryBuffer =ObedienceEncryTools.desDecrypt(secretKey, keyValueBuffer);
            keyValueAccess.close();
            RandomAccessFile resultFile = new RandomAccessFile(targetFile, "rw");
            resultFile.write(decryBuffer, 0, decryBuffer.length);
            resultFile.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
        return targetPath;
    }

标签:AES,String,DES,加解密,Cipher,new,import,byte,data
来源: https://blog.csdn.net/fepengwang/article/details/112716475

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有