SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");// 生成密匙
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");// 创建密码器
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);// 初始化
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "UTF-8");
首先讲一下破解秘钥的两种方式一种是叫做cryptoanalysis,就是基于密码的数学算法从中寻找漏洞来进行破解,比如线性密码攻击,差分密码攻击对于AES来说,目前还没有比较低复杂度的攻击算法另外一种是基于物理实现来攻击的,首先,AES真正的应用必然不是题主或者我手算的,它必然运行于一些物理平台,最简单的就是一个ARM芯片,或者FPGA芯片。芯片会有一些侧信道信息,比如电磁辐射,功率,或者是运算时间。而对于不同的秘钥,这些侧信道信息都是不同的。目前这些攻击都很强大,需要一定的反制措施来防范。具体方法的解释涉及到最底层的硬件知识。
这个非常难,现在只有暴力破解一种可行的方法。
aes加密其实是一种对称加密的算法,256位的话,其实就是计算的复杂度比128位增加了很多而已,因为我们一般的解破办法都是采用字典或者是遍历的方法来解破,所以计算复杂度增加就直接增加了计算的时间。如果这个时间很大的话,就认为不可能解破了。
AES 256位加密:
AES真正的应用必然不是手算的,它必然运行于一些物理平台,最简单的就是一个ARM芯片,或者FPGA芯片。芯片会有一些侧信道信息,比如电磁辐射,功率,或者是运算时间。而对于不同的秘钥,这些侧信道信息都是不同的。目前这些攻击都很强大,需要一定的反制措施来防范。具体方法的解释涉及到最底层的硬件知识,就不做赘述了。