All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiongyingqi.util.MessageEncryptionHelper Maven / Gradle / Ivy

package com.xiongyingqi.util;

import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

/**
 * Created by xiongyingqi on 14-3-10.
 */
public class MessageEncryptionHelper {
    public static final boolean toUpperCase = true;

    /**
     * 将摘要信息转换为相应的编码
     *
     * @param code    编码类型
     * @param message 摘要信息
     * @return 相应的编码字符串
     */
    private static String encode(String code, String message) {
        return encode(code, message.getBytes());
    }

    private static String encode(String code, byte[] message) {
        MessageDigest md;
        String encode = null;
        try {
            md = MessageDigest.getInstance(code);
            encode = byteArrayToHexString(md.digest(message));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return encode;
    }

    private static String byteArrayToHexString(byte[] digest) {
        StringBuffer md5StrBuff = new StringBuffer();

        for (int i = 0; i < digest.length; i++) {
            if (Integer.toHexString(0xFF & digest[i]).length() == 1) {
                md5StrBuff.append("0").append(Integer.toHexString(0xFF & digest[i]));
            } else {
                String hex = Integer.toHexString(0xFF & digest[i]);
                if (toUpperCase) {
                    hex = hex.toUpperCase();
                }
                md5StrBuff.append(hex);
            }
        }
        return md5StrBuff.toString();
    }

    /**
     * 将摘要信息转换成MD5编码
     *
     * @param message 摘要信息
     * @return MD5编码之后的字符串
     */
    public static String md5Encode(String message) {
        return encode("MD5", message);
    }

    /**
     * 将摘要信息转换成SHA编码
     *
     * @param message 摘要信息
     * @return SHA编码之后的字符串
     */
    public static String shaEncode(String message) {
        return encode("SHA", message);
    }

    /**
     * 将摘要信息转换成SHA-256编码
     *
     * @param message 摘要信息
     * @return SHA-256编码之后的字符串
     */
    public static String sha256Encode(String message) {
        return encode("SHA-256", message);
    }

    /**
     * 将摘要信息转换成SHA-512编码
     *
     * @param message 摘要信息
     * @return SHA-512编码之后的字符串
     */
    public static String sha512Encode(String message) {
        return encode("SHA-512", message);
    }

    /**
     * 将摘要信息转换成SHA编码
     *
     * @param message 摘要信息
     * @return SHA编码之后的字符串
     */
    public static String shaEncode(byte[] message) {
        return encode("SHA", message);
    }

    /**
     * 将摘要信息转换成SHA-256编码
     *
     * @param message 摘要信息
     * @return SHA-256编码之后的字符串
     */
    public static String sha256Encode(byte[] message) {
        return encode("SHA-256", message);
    }

    /**
     * 将摘要信息转换成SHA-512编码
     *
     * @param message 摘要信息
     * @return SHA-512编码之后的字符串
     */
    public static String sha512Encode(byte[] message) {
        return encode("SHA-512", message);
    }

    /**
     * 加密方法
     * 
     * // 1.1 >>> 首先要创建一个密匙
     * // DES算法要求有一个可信任的随机数源
     * SecureRandom sr = new SecureRandom();
     * // 为我们选择的DES算法生成一个KeyGenerator对象
     * KeyGenerator kg = KeyGenerator.getInstance("DES");
     * kg.init(sr);
     * // 生成密匙
     * SecretKey key = kg.generateKey();
     * // 获取密匙数据
     * byte rawKeyData[] = key.getEncoded();
     * //        byte rawKeyData[] = "sucretsa".getBytes();
     * System.out.println("密匙长度===>" + rawKeyData.length);
     * System.out.println("密匙Base64===>" + Base64.encodeBytes(rawKeyData));
     *
     * String str = "hi.baidu.com/beijingalana"; // 待加密数据
     * // 2.1 >>> 调用加密方法
     * byte[] encryptedData = desEncrypt(rawKeyData, str.getBytes());
     * // 3.1 >>> 调用解密方法
     * byte[] decrypt = desDecrypt(rawKeyData, encryptedData);
     * System.out.println("解密===>" + new String(decrypt));
     * 
* * @param rawKeyData 密钥 * @param data 要加密的数据 * @return * @throws java.security.InvalidKeyException * @throws NoSuchAlgorithmException * @throws javax.crypto.IllegalBlockSizeException * @throws javax.crypto.BadPaddingException * @throws javax.crypto.NoSuchPaddingException * @throws java.security.spec.InvalidKeySpecException */ public static byte[] desEncrypt(byte rawKeyData[], byte[] data) throws InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密匙数据创建一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(rawKeyData); // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 现在,获取数据并加密 // byte data[] = str.getBytes(); // 正式执行加密操作 byte[] encryptedData = cipher.doFinal(data); // System.out.println("加密后===>" + encryptedData); return encryptedData; } /** * 解密方法 * * @param rawKeyData * @param encryptedData * @return byte[] * @throws IllegalBlockSizeException * @throws BadPaddingException * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws NoSuchPaddingException * @throws InvalidKeySpecException */ public static byte[] desDecrypt(byte rawKeyData[], byte[] encryptedData) throws IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeySpecException { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密匙数据创建一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(rawKeyData); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, key, sr); // 正式执行解密操作 byte decryptedData[] = cipher.doFinal(encryptedData); // System.out.println("解密后===>" + new String(decryptedData)); return decryptedData; } public static void main(String[] args) throws NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException, InvalidKeySpecException, InvalidKeyException { EntityHelper.print(sha256Encode("")); EntityHelper.print(sha512Encode("")); EntityHelper.print(md5Encode("")); // 1.1 >>> 首先要创建一个密匙 // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 为我们选择的DES算法生成一个KeyGenerator对象 KeyGenerator kg = KeyGenerator.getInstance("DES"); kg.init(sr); // 生成密匙 SecretKey key = kg.generateKey(); // 获取密匙数据 byte rawKeyData[] = key.getEncoded(); // byte rawKeyData[] = "sucretsa".getBytes(); System.out.println("密匙长度===>" + rawKeyData.length); System.out.println("密匙Base64===>" + Base64.encodeBytes(rawKeyData)); String str = "hi.baidu.com/beijingalana"; // 待加密数据 // 2.1 >>> 调用加密方法 byte[] encryptedData = desEncrypt(rawKeyData, str.getBytes()); encryptedData = desEncrypt(rawKeyData, encryptedData); // 3.1 >>> 调用解密方法 byte[] decrypt = desDecrypt(rawKeyData, encryptedData); decrypt = desDecrypt(rawKeyData, decrypt); System.out.println("解密===>" + new String(decrypt)); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy