`

AES对称加密算法[通用于windows和lunix系统]

 
阅读更多

先码代码,后续再补上注释

/**
 * AES加密
*
 * @param sourceStr 需要加密的字符串
* @return AES加密结果为btye数组,考虑到可读性以及加密后的byte数组与String类之间强转是不可逆的。
* 因此返回结果将btye数组转换成十六进制字符串
* 加密失败后会抛出异常
*/

public static String encryptAES(String srcStr, String key) {
    try {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, getKey(key));
        return parseToHexStr(cipher.doFinal(srcStr.getBytes()));
    } catch (Exception e) {
        throw Exceptions.unchecked(e);
    }
}
/**
 * AES解密
*
 * @param srcStr AES加密后提供的十六进制字符串
* @return 以项目默认编码输出解密后字符串
* 解密失败后会抛出异常
*/
public static String decryptAES(String srcStr, String key) {
    try {
        byte[] srcBytes = parseToBytes(srcStr);
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, getKey(key));
        return new String(cipher.doFinal(srcBytes), Charset.defaultCharset());
    } catch (Exception e) {
        throw Exceptions.unchecked(e);
    }
}
/**
 * btye数组转换成十六进制的字符串
*/
private static String parseToHexStr(byte[] bytes) {
    StringBuilder stringBuilder = new StringBuilder();
    for (byte aByte : bytes) {
        String hex = Integer.toHexString(aByte & 0xFF);
        stringBuilder.append(hex.length() == 1 ? '0' + hex : hex);
    }
    return stringBuilder.toString();
}

/**
 * 十六进制字符串转成btye数组
*/
private static byte[] parseToBytes(String src) {
    byte[] resBytes = new byte[src.length() / 2];
    for (int i = 0; i < resBytes.length; i++) {
        Integer highPlace = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);
        Integer lowPlace = Integer.parseInt(src.substring(i * 2 + 1, (i + 1) * 2), 16);
        resBytes[i] = (byte) (highPlace * 16 + lowPlace);
    }
    return resBytes;
}
/**
 * 根据给定的key生成密钥,由于windowslunix 内部实现 SecureRandom 原理不同,在指定获取密钥方法后需要setSeed
 */
private static SecretKey getKey(String key) {
    try {
        KeyGenerator kegen = KeyGenerator.getInstance("AES");
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
        secureRandom.setSeed(key.getBytes());
        //指定密钥长度为128kegen.init(128, secureRandom);
        return kegen.generateKey();
    } catch (Exception e) {
        throw Exceptions.unchecked(e);
    }
}

分享到:
评论

相关推荐

    LUNIX系统学习书

    ### Linux系统下通过CDMA 1X手机上网的配置与实践 #### 一、引言 随着移动通信技术的发展,越来越多的用户希望能够通过各种设备访问互联网。本文将介绍如何在Linux系统下使用CDMA 1X手机进行互联网连接。CDMA 1X是...

    锐捷客户端 Lunix系统

    锐捷客户端 Lunix系统适用 亲测可用 稳定性好

    Lunix 常用命令

    Lunix 系统中有许多常用的命令和文件目录,了解这些命令和目录对系统管理和维护非常重要。 目录架构 Lunix 系统的目录架构非常重要,了解这些目录的作用和用途是非常必要的。 * `/`:根目录,是所有目录的顶级...

    FTP客户端连接工具(window、lunix通用)

    本篇文章将深入探讨"FTP客户端连接工具",尤其是适用于Windows和Linux系统的FlashFXP。 **FTP客户端的基本功能:** 1. **登录服务器**:用户需要提供FTP服务器的地址(域名或IP)、用户名和密码来建立连接。 2. **...

    Lunix实用教程(从菜鸟到高手)

    本教程涵盖了 Linux 操作系统的基础知识和高级技巧,从初学者到高手,全面介绍了 Linux 系统的特点和开发技巧。 Linux 概述 Linux 是一个开源操作系统,由 Linus Torvalds 于 1991 年创建。Linux 是一种 Unix 类...

    AIX5LUNIX系统命令详解

    以上仅为AIX5LUNIX系统中部分常用命令的简要介绍,实际操作中还有很多其他命令和参数可供选择,以满足各种系统管理和维护需求。深入理解并熟练掌握这些命令,将极大地提升你在AIX环境下的工作效率。通过阅读《UNIX...

    linux+win双系统切换

    在现代计算机环境中,有时我们需要同时使用Linux和Windows操作系统,以满足不同的工作需求或个人喜好。在这种情况下,安装一个双系统成为了一个很好的解决方案。本篇文章将详细介绍如何在Linux和Windows之间进行无缝...

    shell编程和lunix命令

    当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行...

    lunix

    为初学者提供最实用的参考

    lunix 系统API man2.6.chm

    这份文档是英文版,但其全面性和实用性对于那些致力于学习和研究Unix/Linux系统编程的爱好者来说,无疑是宝贵的财富。 在Unix和Linux操作系统中,系统API(Application Programming Interface)是程序员用来与操作...

    lunix0.01/0.11源码

    4. **分析进程管理**:Linux的进程调度算法和进程间通信机制都在源代码中有清晰的体现。 5. **探索内存管理**:了解Linux如何分配和回收内存,以及如何实现虚拟内存系统,这些都是操作系统性能优化的关键。 6. **...

    Lunix基础入门教程

    Lunix基础入门教程,简单入门的教程,看起来轻松点

    Lunix帮助. Lunix

    在Lunix(这里应当是指Linux)操作系统中,用户可以通过多种命令实现系统的重启与关闭。这些命令为用户提供了一个灵活且强大的方式来管理他们的系统。 ##### 重启命令 1. **`reboot`**:这个命令最简单直接,用于...

    Lunix常用命令

    Lunix 操作系统中有许多实用的命令,它们可以帮助用户高效地完成各种任务。这些命令可以分为文件管理、进程管理、磁盘管理等几个方面。 文件管理命令 * cd 命令:用于进入下一级目录,以便进行文件操作。例如,...

    《lunix操作系统》课件 清华大学出版

    学习Linux下的不同文件系统类型(如EXT4、XFS、Btrfs),以及磁盘分区、LVM(逻辑卷管理)、RAID(冗余磁盘阵列)等存储管理技术,有助于优化系统性能和数据安全。 八、安全管理 了解Linux的安全机制,包括用户和组...

    LUNIX编程PPT

    Linux编程是操作系统领域中的核心技能,它涉及到对操作系统内核的接口使用,系统调用,以及与硬件交互的低级编程。本PPT的主题“LUNIX编程”将深入讲解Linux环境下的程序设计,涵盖的内容广泛且实用。以下是该主题...

    lunix菜鸟指令大全

    ### lunix菜鸟指令大全 #### 一、命令格式与操作 ...以上就是Lunix系统中一些常用的基础命令和操作技巧,掌握它们可以帮助初学者更加高效地使用Lunix系统。随着实践的深入,你还可以探索更多高级功能和技术细节。

    lunix命令中文版API

    在IT领域,Unix操作系统是最早期的多用户、多任务操作系统之一,它的命令行界面提供了丰富的功能,对于系统管理、程序开发以及自动化脚本编写都有着不可或缺的作用。"Linux命令中文版API"是一个针对Unix和Linux命令...

    Lunix下安装环境

    在Linux环境下搭建开发和运行Java应用的环境,主要包括两个关键步骤:安装Java Development Kit (JDK) 和 Apache Tomcat 服务器。以下是对这两个组件的详细安装过程和常见问题的解答。 **1. 安装JDK** JDK是Java...

Global site tag (gtag.js) - Google Analytics