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

ASE加密

    博客分类:
  • Java
阅读更多

AES加解密算法,使用Base64做转码以及辅助加密:

 

package com.wintv.common;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/*******************************************************************************
 * AES加解密算法
 * 
 * @author arix04
 * 
 */

public class AES {

    // 加密
    public static String Encrypt(String sSrc, String sKey) throws Exception {
        if (sKey == null) {
            System.out.print("Key为空null");
            return null;
        }
        // 判断Key是否为16位
        if (sKey.length() != 16) {
            System.out.print("Key长度不是16位");
            return null;
        }
        byte[] raw = sKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes());

        return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
    }

    // 解密
    public static String Decrypt(String sSrc, String sKey) throws Exception {
        try {
            // 判断Key是否正确
            if (sKey == null) {
                System.out.print("Key为空null");
                return null;
            }
            // 判断Key是否为16位
            if (sKey.length() != 16) {
                System.out.print("Key长度不是16位");
                return null;
            }
            byte[] raw = sKey.getBytes("ASCII");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec iv = new IvParameterSpec("0102030405060708"
                    .getBytes());
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original);
                return originalString;
            } catch (Exception e) {
                System.out.println(e.toString());
                return null;
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
            return null;
        }
    }

    public static void main(String[] args) throws Exception {
        /*
         * 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定
         * 此处使用AES-128-CBC加密模式,key需要为16位。
         */
        String cKey = "1234567890123456";
        // 需要加密的字串
        String cSrc = "Email : arix04@xxx.com";
        System.out.println(cSrc);
        // 加密
        long lStart = System.currentTimeMillis();
        String enString = AES.Encrypt(cSrc, cKey);
        System.out.println("加密后的字串是:" + enString);

        long lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("加密耗时:" + lUseTime + "毫秒");
        // 解密
        lStart = System.currentTimeMillis();
        String DeString = AES.Decrypt(enString, cKey);
        System.out.println("解密后的字串是:" + DeString);
        lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("解密耗时:" + lUseTime + "毫秒");
    }
}

 

 

 

AES加解密算法,使用byte2hex做转码:

 

package com.wintv.common;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/*******************************************************************************
 * AES加解密算法
 * 
 * @author arix04
 * 
 */

public class AES {

    // 加密
    public static String Encrypt(String sSrc, String sKey) throws Exception {
        if (sKey == null) {
            System.out.print("Key为空null");
            return null;
        }
        // 判断Key是否为16位
        if (sKey.length() != 16) {
            System.out.print("Key长度不是16位");
            return null;
        }
        byte[] raw = sKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes());

        return byte2hex(encrypted).toLowerCase();
    }

    // 解密
    public static String Decrypt(String sSrc, String sKey) throws Exception {
        try {
            // 判断Key是否正确
            if (sKey == null) {
                System.out.print("Key为空null");
                return null;
            }
            // 判断Key是否为16位
            if (sKey.length() != 16) {
                System.out.print("Key长度不是16位");
                return null;
            }
            byte[] raw = sKey.getBytes("ASCII");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec iv = new IvParameterSpec("0102030405060708"
                    .getBytes());
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] encrypted1 = hex2byte(sSrc);
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original);
                return originalString;
            } catch (Exception e) {
                System.out.println(e.toString());
                return null;
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
            return null;
        }
    }

    public static byte[] hex2byte(String strhex) {
        if (strhex == null) {
            return null;
        }
        int l = strhex.length();
        if (l % 2 == 1) {
            return null;
        }
        byte[] b = new byte[l / 2];
        for (int i = 0; i != l / 2; i++) {
            b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),
                    16);
        }
        return b;
    }

    public static String byte2hex(byte[] b) {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }
        return hs.toUpperCase();
    }

    public static void main(String[] args) throws Exception {
        /*
         * 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定
         */
        String cKey = "1234567890123456";
        // 需要加密的字串
        String cSrc = "Email : arix04@xxx.com";
        System.out.println(cSrc);
        // 加密
        long lStart = System.currentTimeMillis();
        String enString = AES.Encrypt(cSrc, cKey);
        System.out.println("加密后的字串是:" + enString);

        long lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("加密耗时:" + lUseTime + "毫秒");
        // 解密
        lStart = System.currentTimeMillis();
        String DeString = AES.Decrypt(enString, cKey);
        System.out.println("解密后的字串是:" + DeString);
        lUseTime = System.currentTimeMillis() - lStart;
        System.out.println("解密耗时:" + lUseTime + "毫秒");
    }
}

 

分享到:
评论

相关推荐

    ase.zip_ase加密源代码_信息加密案例

    ASE加密是一种特定的加密算法,通常用于保护敏感数据的安全,比如在信息传输、存储或应用程序中。这个"ase.zip"压缩包包含的"ase加密源代码"和"信息加密案例",很可能是一个示例程序或者库,展示了如何使用ASE加密...

    ase加密解密修复bug

    在这个场景下,“ase加密解密修复bug”指的是在编程过程中遇到的关于ASE加密解密的错误,需要进行调试和修复。 首先,我们需要理解ASE加密的基本原理。ASE采用对称加密算法,这意味着加密和解密使用的是同一密钥。...

    openssl RSA、ASE加密

    **OpenSSL库与RSA、ASE加密** OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。在信息安全领域,加密技术...

    AES.rar_https ://aes63.com_https://aes63.com/_spreadtw4_接口Ase加密

    描述中提到的“接口Ase加密”可能是指提供了AES加密功能的API接口,允许开发者在程序中直接调用以实现数据加密。这样的接口通常会包含加密和解密两个方法,用户需要提供明文数据和密钥。使用时,先进行初始化,设置...

    python实现ASE加密解密

    通过python代码实现ASE加密 解密的过程代码,逻辑简单,在pycharm下载相关依赖包之后可直接运行,适用于在api对接过程中或数据处理过程中有进行加解密的场景。

    rsa+ase加密demo

    在IT行业中,安全加密是保护数据隐私和网络安全的关键技术之一。RSA和AES是两种常见的加密算法,它们在很多场景下被广泛使用。本教程将详细解释这两种加密算法以及如何在一个DEMO项目中结合使用它们。 **RSA算法** ...

    ASE 加密算法 改进版

    AES Advanced Encryption 改进版

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

    本篇文章将详细讲解如何在Java和.NET平台上利用ASE加密机制实现双语加解密,并介绍相应的工具类。 一、ASE加密机制原理 ASE加密算法基于对称密钥加密,它提供了高强度的安全性和快速的加密性能。该算法通常包括一个...

    nrf51822使用AES加密通信数据

    为了保证在蓝牙低功耗(BLE)通信中的数据安全性,文章详细介绍了如何在使用nrf51822和nrf52832蓝牙微控制器(MCU)上应用高级加密标准(AES)算法来加密传输数据。以下是关于nrf51822和nrf52832使用AES加密通信数据...

    ASE加密算法可逆----

    该算法加密后24位字符和符号的组合,相比较与RSA存储文本较少,相比于MD5该算法可逆,不会较多的占用数据库资源。加密和解密都在代码中,有需要的朋友可以看下

    通用AES加密版本

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它为数据提供了强大的安全保护,确保信息在传输或存储时不被未经授权的用户访问。AES在各种编程语言中都有实现,包括Objective-C、C#、Java和...

    Linux上运行的C语言的AES加密算法

    Linux操作系统上的C语言实现AES加密算法是一个常见的任务,特别是在数据安全和网络安全领域。AES,全称为Advanced Encryption Standard,是目前广泛采用的一种对称加密标准,它提供了强大的数据保护能力。在Linux...

    微信小程序 AES ECB base64 加密解密

    在IT行业中,加密技术是确保数据安全的重要手段。在微信小程序开发中,为了保护用户敏感信息,如登录凭证、个人信息等,通常会采用加密技术。本篇将详细讲解微信小程序中使用AES(Advanced Encryption Standard)ECB...

    基于AES的CRT模式加密 (用C#写的)

    **基于AES的CRT模式加密(C#实现)** 在信息安全领域,加密技术是保护数据隐私的重要手段。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它以其高效性和安全性著称。本项目中,我们关注的是...

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

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

    AES实现加密和解密的动态库

    这个动态库提供了AES加密和解密的功能,对于理解和应用AES技术具有重要意义。 AES的全称为高级加密标准,是由NIST(美国国家标准与技术研究院)在2001年正式采纳的,用于替代原先的DES(数据加密标准)。AES采用了...

    ASE和RSA加解密

    1. ASE加密: ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; byte[] keyBytes = "mySecretKey12345".getBytes("UTF-8"); SecretKeySpec keySpec = new ...

    LABVIEW 资源,AES128加密子VI:Expand Key

    LABVIEW 资源,AES128加密子VI:Expand Key

    22.7zASE加密解密

    在本文中,我们将深入探讨如何使用7-Zip软件进行ASE加密和解密,以及与之相关的知识点。 首先,7-Zip是一款免费且开源的文件压缩工具,它支持多种压缩格式,包括7z、ZIP、RAR等,并且提供了对AES-256加密的支持,这...

    AES加密算法接口及Delphi示例源程序

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它基于块密码,具有高安全性和高效性。在信息安全领域,AES被用作保护数据的秘密性,确保数据在传输或存储时不受非法访问。AES的加密过程包括多...

Global site tag (gtag.js) - Google Analytics