写道
此次加密基于AES-128 CBC PKCS5填充模式。密钥为长度64的hex string,将其转为32-byte key,前8 bytes和后8 bytes组合为key,剩下中间的为IV。
如密钥:112b1ea14ae0ac4c081c26b4974b03f8c41d40cea3418eba6c0203404cb470bf
那么可划分为112b1ea14ae0ac4c |||| 081c26b4974b03f8c41d40cea3418eba ||| 6c0203404cb470bf
注:一个byte对应2个hex string
源代码:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESEncryptor {
private static String AES_HEX = "112b1ea14ae0ac4c081c26b4974b03f8c41d40cea3418eba6c0203404cb470bf";
private Cipher cipher;
private IvParameterSpec dps;
private SecretKeySpec skeySpec;
public AESEncryptor() throws Exception{
byte[] passkey = hex2Bin(AES_HEX);
byte[] key = getAESKey(passkey);
byte[] iv = getAESIV(passkey);
dps = new IvParameterSpec(iv);
skeySpec = new SecretKeySpec(key, "AES");
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
}
private byte[] getAESIV(byte[] keyRaw) throws Exception { //获得32 byte数组中的一部分作为KEY
byte[] iv = new byte[16];
System.arraycopy(keyRaw, 8, iv, 0, 16);
return iv;
}
private byte[] getAESKey(byte[] keyRaw) throws Exception { //获得32 byte数组中的一部分作为KEY
byte[] key = new byte[16];
System.arraycopy(keyRaw, 0, key, 0, 8);
System.arraycopy(keyRaw, 24, key, 8, 8);
return key;
}
public String encrypt(String command) throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, dps);
byte[] buf = cipher.doFinal(command.getBytes());
return this.byte2hexString(buf);
}
public String decrypt(String sSrc) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, skeySpec, dps);
return new String(cipher.doFinal(hex2Bin(sSrc)));
}
private byte[] hex2Bin(String src) {
if (src.length() < 1)
return null;
byte[] encrypted = new byte[src.length() / 2];
for (int i = 0; i < src.length() / 2; i++) {
int high = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(src.substring(i * 2 + 1, i * 2 + 2), 16);
encrypted[i] = (byte) (high * 16 + low);
}
return encrypted;
}
private String byte2hexString(byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
public static void main(String[] args) {
AESEncryptor aes = null;
try {
aes = new AESEncryptor();
String para = aes.encrypt("password=testpswd");
System.out.println(para);
String s = aes.decrypt("29694e1985a631fade0d92fca230f75f2724e6c7fc96d15cdcdef787012ad803");
System.out.println(s);
System.out.println(aes.encrypt("password=testpswd"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
因为美国法律限制,JAVA默认支持AES 128 Bit 的key, 如果你计划使用 192 Bit 或者 256 Bit key, java complier 会抛出 Illegal key size Exception 解决办法也很简单: 将下面链接中的jar包下载下来,替换jdk 与jre...
AES加密时抛出java.security.InvalidKeyException: Illegal key size or default parameter
AES加密-Java与iOS的解决方案.docx
Exception: java.security.InvalidKeyException:illegal Key Size 这个资源就是最新的,为了解决这个问题而存在的 这个zip中包含jdk 1.6 1.7 和 1.8 的解决aes加密限制解决方案和用到的jar包
将 Visual Basic AES 加密/解密函数迁移到 Java 加密/解密字符串的两个函数作为下面粘贴的原始 Visual Basic 代码。 技术方案:提供的方案是J2SE,使用javax.crypto和java.security包。 解决方案与 JDK 7+ 一起...
可能最具移动性的解决方案必须是用 Java 编写的东西。 不幸的是,我尝试过的程序似乎都没有我想要的功能(以我想要的价格)。 长话短说 - 这是我对加密的看法。 我并不是声称它没有错误,但我已尽力确保加密数据的...
本资源为一个基于Java语言开发的网络通讯系统的完整设计与实现文件包,旨在为用户提供一个全面且实用的网络通信解决方案。该系统集成了客户端与服务器端的功能,支持多用户在线交流、文件传输和消息加密等核心特性。...
开放接口设计-解决方案 安全设计(防窃取,防篡改,防泄漏) Java和JavaScrip互通验签及加解密(SM3, AES, 3DES) 多版本管理支持 一. 简单验签加密组件 1. 介绍说明 * BASE64 严格地说,属于编码格式,而非加密算法...
jCryption 是在客户端和服务器之间提供表单数据加密的解决方案,无需昂贵的 SSL/HTTPS 服务器证书。这个 ASP.NET 服务器端库有什么值得注意的: 尊重原始 jCryption 协议(OpenSSL PEM 样式格式和协商) OpenSSL ...
matlab代码如何加密MI-BHW.16课程 贝兹佩诺斯特·哈德瓦鲁(BezpečnostHardwaru) CTU /ČVUTFIT 任务1-DPA-差分功率分析 ...要建立解决方案,请使用AVR studio并照常进行。 怎么跑 使用AVR Studio构建项目
我正在尝试提供广泛的编程语言,实际上我为这些框架提供了解决方案: Java , PHP , C# , Javascript-CryptoJs , NodeJs Crypto , NodeJs node-forge和Python (对于选定的程序),只要该功能是在平台上可用。...
开源的企业级单点登录解决方案。 CAS Server 为需要独立部署的 Web 应用。 CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。 邮箱 ...
借助内置的 AES 256 位加密和全套其他安全功能,可以确保 Symantec pcAnywhere 客户端和被控端之间的通信安全。您是否急需解决使用中遇到的问题?借助最新的 pcAnywhere 移动功能,可以通过任意的 TCP/IP 连接(无论...
DOCX,PPTX文件视频文件支持灵活的搜索引擎,带有建议和突出显示在所有受支持的文件中进行全文搜索所有元数据自定义用户定义的元数据 工作流程系统 存储文件的256位AES加密文件版本控制 带嵌套标签系统从电子邮件...
策略模式工作坊陈述我们希望扩展在之前的研讨会中开发... 请记住,您必须提供源代码和详细说明所提议解决方案结构的 UML 类图。 注意:除了保存操作之外,保存策略还必须允许按姓名或代码搜索和检索(检索)学生。UML图
*世界各地都在使用的优秀的、经证明有效的解决方案:用户超过365万、全球部署BlackBerry的企业及政府组织超过45,000、可用于50多个国家/地区的超过100个网络完整的无线企业解决方案BlackBerry提供了一个完全集成的...
- 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。 - 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统...