`
qiufeihu
  • 浏览: 34318 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaASE算法实现

    博客分类:
  • Java
阅读更多
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加密解密算法
 * @author Qfh
 * 地址:http://blog.csdn.net/hbcui1984/article/details/5201247
 */
public class AESUtil {
	
	public static String AesKey = "duanRon!@"; //秘钥
	
    /**
     * 加密
     * 
     * @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;
    }
    
    /**解密
     * @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;
    }
    
	public static void main(String[] args) throws Exception {
        String content = "小明学会了123456,但是他喜欢abcdeef,可是!@######未知";
        String password = "duanRon!@";
        //加密
        System.out.println("加密前:" + content);
        byte[] encryptResult = encrypt(content, password);
        System.out.println("密文:" + new String(encryptResult));
        //解密
        byte[] decryptResult = decrypt(encryptResult,password);
        System.out.println("解密后:" + new String(decryptResult));
	}
	
	
    /**将二进制转换成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();
    }
    
    /**将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 temp
     * @return
     */
    public static String encode(String temp){
    	byte[] tempByte = AESUtil.encrypt(temp,AESUtil.AesKey);  //加密
		temp = AESUtil.parseByte2HexStr(tempByte);   //将二进制转换成16进制
		return temp;
    }
    
    /**
     * 解密返回UTF-8字符串
     * @param temp
     * @return
     */
    public static String decode(String temp){
    	byte[] tempByte = AESUtil.parseHexStr2Byte(temp);  //将16进制转换为二进制
		tempByte = AESUtil.decrypt(tempByte,AESUtil.AesKey);  //解密
		try {
			temp = new String(tempByte,"UTF-8");
		}catch(UnsupportedEncodingException e) {
			e.printStackTrace();
		}
    	return temp;
    }
    

}

 

分享到:
评论

相关推荐

    ASE双语加解密工具类(java,net)

    由于ASE算法是跨平台的,因此在Java和.NET之间进行加解密时,关键在于确保双方使用相同的密钥和算法参数。在实际应用中,可以通过安全的方式(如HTTPS)交换密钥,并在两端都使用相同的密钥进行加解密。 五、双语...

    CMAC.rar_C 实现_CMAC算法_cmac aes _cmac算法实现_基于AES 的CMAC

    在本案例中,我们关注的是C语言实现的CMAC算法,特别地是基于AES的CMAC实现。 CMAC算法的核心思想是通过块密码的运算产生一个固定长度的认证标签,这个标签与原始消息相关联,并且只有拥有正确密钥的人才能生成或...

    加密算法 ASE ECC

    本文将深入探讨两种重要的加密算法——AES(高级加密标准)和ECC(椭圆曲线密码学),以及它们在Java环境下的实现。 **AES(高级加密标准)** AES,全称为Advanced Encryption Standard,是一种广泛使用的对称加密...

    AES加解密JAVA实现(源码)

    通过使用Java自带的加密库,可以方便快捷地实现AES算法。需要注意的是,密钥的长度必须符合要求(本例中为128位),并且在实际应用中应避免使用固定的密钥,建议采用更安全的方式生成随机密钥。此外,为了确保数据的...

    Java实现AES/CBC/PKCS7Padding加解密的方法

    Java实现AES/CBC/PKCS7Padding加解密的方法是指使用Java语言实现AES对称加密算法的加解密过程,其中包括了加密和解密两个步骤。AES是一种对称加密算法,使用同一个密钥进行加密和解密操作。 在Java中,AES加解密...

    AES加密 – Java与android、iOS、js的同步实现

    文件"js aes.txt"可能是JavaScript实现AES加密的示例代码,而"AES加密 – iOS与Java的同步实现"可能是介绍如何在iOS和Java之间实现同步加密的教程或代码示例。通过学习这些内容,开发者可以掌握如何在不同平台上实现...

    AES128算法验证实例(可直接使用)

    在Android平台上,实现AES128加密和解密功能,可以使用Java Cryptography Extension (JCE)库中的 Cipher 类。首先需要设置好密钥和初始化向量(IV),然后选择对应的工作模式和填充方式初始化Cipher对象,进行加密或...

    ASE和RSA加解密

    在编程实现ASE和RSA的加解密过程中,通常会使用已有的加密库,如Java的JCE(Java Cryptography Extension)或者Python的pycryptodome库。以下是一个简单的示例: 1. ASE加密: ```java import javax.crypto.Cipher;...

    java AES加密 解决加密过长非法异常问题

    在Java编程语言中,AES(Advanced Encryption Standard)是一种广泛应用的对称加密算法,用于保护数据的安全性。在处理加密过程中,可能会遇到“非法参数”异常,这通常是因为输入数据长度不符合AES加密的要求。AES...

    ASE,RSA加解密,支持java和Android

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在Java和Android平台上的数据加密和解密。这个压缩包文件可能包含了用于在Java和Android之间进行RSA加解密操作的代码示例或者库文件。以下是...

    通用AES加密版本

    AES在各种编程语言中都有实现,包括Objective-C、C#、Java和Android。这些语言的通用AES加密版本允许开发者在不同的平台上实现一致的安全策略。 在Objective-C中,AES加密通常使用CommonCrypto库来实现。这个库提供...

    aes-java:用 Java 编写的单向 128 位 AES ECB 加密

    在Java中,AES加密通常使用Java Cryptography Extension (JCE) 库来实现。JCE提供了一系列接口和类,如`Cipher`,`SecretKeySpec`和`AlgorithmParameterSpec`,用于实现不同加密算法和模式。以下是一些关于AES ECB...

    TPProject-2:一点 java 好 ase;)

    但是,我们可以推测这个项目可能是一个初级到中级的Java编程练习,涉及基础的Java语法、面向对象编程概念、异常处理、数据结构或者算法等。 从【标签】"Java"来看,我们可以聚焦于Java语言的相关知识点: 1. **...

    Sybase ASE ODBC驱动 16.0.0.2

    使用"Sybase ASE ODBC驱动 16.0.0.2",开发者可以构建基于ODBC的应用程序,实现与Sybase ASE数据库的无缝连接,无论是在数据迁移、报表生成、数据分析还是数据仓库项目中,都能发挥其高效、稳定的优势。

    Android 加密/解密音频文件(AES)

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,因其高效性和安全性而备受青睐。本篇文章将深入探讨如何使用AES算法来对本地音频文件进行加解密操作。 首先,理解AES算法的基本原理。AES是一种...

    MySQL向Sybase ASE迁移指南

    Sybase ASE的查询处理器采用了先进的优化算法,能够智能地选择最佳查询计划,提高查询效率。 ##### 3.7 分布式事务 支持跨多个数据库服务器的分布式事务处理,确保数据一致性。 ##### 3.8 事务处理 提供了强大的...

    java加密解密文件

    本项目"java加密解密文件"显然涉及到使用Java语言实现对文件进行加解密的程序。在这个过程中,通常会涉及到多种加密算法,如ASE(Advanced Encryption Standard)和MD5(Message-Digest Algorithm 5)。接下来,我们...

    AES.rar_AES_aes java

    标题中的"AES.rar"指的是一个...总之,这个压缩包可能是一个学习和研究AES加密技术的资源,包括了使用Java实现AES的代码,可能还包含了加密实例,适合于理解AES的工作原理以及如何在实际项目中应用这一强大的加密算法。

    delphi 实现AES加/解密

    AES 是一种使用安全码进行信息加密的标准。 它支持 128 位、192 位和 256 位...加密算法的实现在 ElAES.pas 单元中。 本人将其加密方法封装在 AES.pas 单元中, 只需要调用两个标准函数就可以完成字符串的加密和解密。

    Sybase ASE 12.5 发行公告(Sun Solairs).pdf

    - Sybase ASE 12.5 通过智能缓存管理算法提高了内存利用率,减少了磁盘 I/O 操作次数,加快了数据读取速度。 - 新增了压缩功能,可以有效减少存储空间占用,并降低备份和恢复操作所需的时间。 8. **多租户支持** ...

Global site tag (gtag.js) - Google Analytics