先码代码,后续再补上注释
/** * 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生成密钥,由于windows和lunix 内部实现 SecureRandom 原理不同,在指定获取密钥方法后需要setSeed */ private static SecretKey getKey(String key) { try { KeyGenerator kegen = KeyGenerator.getInstance("AES"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(key.getBytes()); //指定密钥长度为128位 kegen.init(128, secureRandom); return kegen.generateKey(); } catch (Exception e) { throw Exceptions.unchecked(e); } }
相关推荐
### Linux系统下通过CDMA 1X手机上网的配置与实践 #### 一、引言 随着移动通信技术的发展,越来越多的用户希望能够通过各种设备访问互联网。本文将介绍如何在Linux系统下使用CDMA 1X手机进行互联网连接。CDMA 1X是...
锐捷客户端 Lunix系统适用 亲测可用 稳定性好
Lunix 系统中有许多常用的命令和文件目录,了解这些命令和目录对系统管理和维护非常重要。 目录架构 Lunix 系统的目录架构非常重要,了解这些目录的作用和用途是非常必要的。 * `/`:根目录,是所有目录的顶级...
本篇文章将深入探讨"FTP客户端连接工具",尤其是适用于Windows和Linux系统的FlashFXP。 **FTP客户端的基本功能:** 1. **登录服务器**:用户需要提供FTP服务器的地址(域名或IP)、用户名和密码来建立连接。 2. **...
以上仅为AIX5LUNIX系统中部分常用命令的简要介绍,实际操作中还有很多其他命令和参数可供选择,以满足各种系统管理和维护需求。深入理解并熟练掌握这些命令,将极大地提升你在AIX环境下的工作效率。通过阅读《UNIX...
本教程涵盖了 Linux 操作系统的基础知识和高级技巧,从初学者到高手,全面介绍了 Linux 系统的特点和开发技巧。 Linux 概述 Linux 是一个开源操作系统,由 Linus Torvalds 于 1991 年创建。Linux 是一种 Unix 类...
在现代计算机环境中,有时我们需要同时使用Linux和Windows操作系统,以满足不同的工作需求或个人喜好。在这种情况下,安装一个双系统成为了一个很好的解决方案。本篇文章将详细介绍如何在Linux和Windows之间进行无缝...
当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行...
为初学者提供最实用的参考
这份文档是英文版,但其全面性和实用性对于那些致力于学习和研究Unix/Linux系统编程的爱好者来说,无疑是宝贵的财富。 在Unix和Linux操作系统中,系统API(Application Programming Interface)是程序员用来与操作...
4. **分析进程管理**:Linux的进程调度算法和进程间通信机制都在源代码中有清晰的体现。 5. **探索内存管理**:了解Linux如何分配和回收内存,以及如何实现虚拟内存系统,这些都是操作系统性能优化的关键。 6. **...
Lunix基础入门教程,简单入门的教程,看起来轻松点
在Lunix(这里应当是指Linux)操作系统中,用户可以通过多种命令实现系统的重启与关闭。这些命令为用户提供了一个灵活且强大的方式来管理他们的系统。 ##### 重启命令 1. **`reboot`**:这个命令最简单直接,用于...
Lunix 操作系统中有许多实用的命令,它们可以帮助用户高效地完成各种任务。这些命令可以分为文件管理、进程管理、磁盘管理等几个方面。 文件管理命令 * cd 命令:用于进入下一级目录,以便进行文件操作。例如,...
学习Linux下的不同文件系统类型(如EXT4、XFS、Btrfs),以及磁盘分区、LVM(逻辑卷管理)、RAID(冗余磁盘阵列)等存储管理技术,有助于优化系统性能和数据安全。 八、安全管理 了解Linux的安全机制,包括用户和组...
Linux编程是操作系统领域中的核心技能,它涉及到对操作系统内核的接口使用,系统调用,以及与硬件交互的低级编程。本PPT的主题“LUNIX编程”将深入讲解Linux环境下的程序设计,涵盖的内容广泛且实用。以下是该主题...
### lunix菜鸟指令大全 #### 一、命令格式与操作 ...以上就是Lunix系统中一些常用的基础命令和操作技巧,掌握它们可以帮助初学者更加高效地使用Lunix系统。随着实践的深入,你还可以探索更多高级功能和技术细节。
在IT领域,Unix操作系统是最早期的多用户、多任务操作系统之一,它的命令行界面提供了丰富的功能,对于系统管理、程序开发以及自动化脚本编写都有着不可或缺的作用。"Linux命令中文版API"是一个针对Unix和Linux命令...
在Linux环境下搭建开发和运行Java应用的环境,主要包括两个关键步骤:安装Java Development Kit (JDK) 和 Apache Tomcat 服务器。以下是对这两个组件的详细安装过程和常见问题的解答。 **1. 安装JDK** JDK是Java...