当前位置:首页 > 开发 > 编程语言 > 加密解密 > 正文

AES加密

发表于: 2014-04-02   作者:annan211   来源:转载   浏览次数:
aes
摘要: package com.duowan.yy.sysop.aes.decrypt; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.secur
package com.duowan.yy.sysop.aes.decrypt;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
 * AES 加密/解密操作
 *
 * 加密思想 : 将二进制数据转换为16进制保存在数据库(为防止出错)   加密算法为 AES
 * @author Administrator
 *
 */
public class AEScrypt {

    /**解密
     * @param content  待解密内容
     * @param password 解密密钥
     * @return
     */
    public static byte[] decrypt(byte[] content, String password) {
            try {
                     KeyGenerator kgen = KeyGenerator.getInstance("AES");
                     kgen.init(128, new SecureRandom(password.getBytes()));
                     SecretKey secretKey = kgen.generateKey();
                     byte[] enCodeFormat = secretKey.getEncoded();
                     SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
                     Cipher cipher = Cipher.getInstance("AES");// 创建密码器
                    cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
                    byte[] result = cipher.doFinal(content);
                    return result; // 加密
            } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                    e.printStackTrace();
            } catch (InvalidKeyException e) {
                    e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                    e.printStackTrace();
            } catch (BadPaddingException e) {
                    e.printStackTrace();
            }
            return null;
    }

    /**
     * 加密
     *
     * @param content 需要加密的内容
     * @param password  加密密码
     * @return
     */
    public static byte[] encrypt(String content, String password) {
            try {
                    KeyGenerator kgen = KeyGenerator.getInstance("AES");
                    kgen.init(128, new SecureRandom(password.getBytes()));
                    SecretKey secretKey = kgen.generateKey();
                    byte[] enCodeFormat = secretKey.getEncoded();
                    SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
                    Cipher cipher = Cipher.getInstance("AES");// 创建密码器
                    byte[] byteContent = content.getBytes("utf-8");
                    cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
                    byte[] result = cipher.doFinal(byteContent);
                    return result; // 加密
            } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                    e.printStackTrace();
            } catch (InvalidKeyException e) {
                    e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                    e.printStackTrace();
            } catch (BadPaddingException e) {
                    e.printStackTrace();
            }
            return null;
    }


    /**将16进制转换为二进制
	 * @param hexStr
	 * @return
	 */
	public static byte[] parseHexStr2Byte(String hexStr) {
	        if (hexStr.length() < 1)
	                return null;
	        byte[] result = new byte[hexStr.length()/2];
	        for (int i = 0;i< hexStr.length()/2; i++) {
	                int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
	                int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
	                result[i] = (byte) (high * 16 + low);
	        }
	        return result;
	}

	/**将二进制转换成16进制
	 * @param buf
	 * @return
	 */
	public static String parseByte2HexStr(byte buf[]) {
	        StringBuffer sb = new StringBuffer();
	        for (int i = 0; i < buf.length; i++) {
	                String hex = Integer.toHexString(buf[i] & 0xFF);
	                if (hex.length() == 1) {
	                        hex = '0' + hex;
	                }
	                sb.append(hex.toUpperCase());
	        }
	        return sb.toString();
	}
}



  加密  
  // 对用户手机进行加密
			String mobile = RequestHelper.getQueryFields(request, MemberInfo.MOBILE);
			if(!"".equals(mobile) && mobile!=null){
				// 加密
				byte[] encryptResult = AEScrypt.encrypt(mobile, ReadDigestkey.readTxtFile());
				// 将 2进制 转换为 16进制 进行保存
				info.setMobile(AEScrypt.parseByte2HexStr(encryptResult));
			}


解密 :
// 将用户 16进制mobile转换为 2进制
			byte[] decryptFrom = AEScrypt.parseHexStr2Byte(info.getMobile());

			byte[] decryptResult = AEScrypt.decrypt(decryptFrom,ReadDigestkey.readTxtFile());

			info.setMobile(new String(decryptResult));

AES加密

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数
高级加密标准(Advanced Encryption Standard,AES) 一、DES 与 AES 比较: 1、DES 采用 56位有效
0 AES简介   美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码
原文地址:实现android的AES加密技术 作者:大牛 密码学中的高级加密标准(Advanced Encryption Sta
对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政
一、加密过程解释 前提:发送方为A,接受方为B 牢记:RSA为非对称加密,AES为对称加密。对称加密,
先搞定AES算法,基本变换包含SubBytes(字节替代)、ShiftRows(行移位)、MixColumns(列混淆)、A
分组密码有五种工作体制:1. 电码本模式(Electronic Codebook Book (ECB));2.密码分组链接模式(
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号