AES是一种精确指定的算法,因此所有AES实现都必须“兼容”。话虽如此,AES是一种可变密钥长度的分组密码,对128位的分组进行操作。要在一个软件中实际使用它,您必须做出一系列其他选择:如何处理包含超过1个块的输入(这称为“模式”),在某些模式中您需要一个初始化向量,您需要处理不包含确切数量块的输入(填充),如何将字符编码为字节,以及如何在不支持它的上下文(如源文件)中表示字节。所有这些东西都需要兼容。
下面是一个测试过的例子。它使用标准的Java加密函数(和Apache Commons编解码器)和JavaScript加密库Crypto-JS。选择如下:128位密钥、密码块链接模式(需要初始化向量)、PKCS5/7填充、UTF-8字符编码、Base64表示字节数组。
这段Java将输出base64编码的密文:
String plainText = "Hello, World! This is a Java/Javascript AES test.";
SecretKey key = new SecretKeySpec(
Base64.decodeBase64("u/Gu5posvwDsXUnV5Zaq4g=="), "AES");
AlgorithmParameterSpec iv = new IvParameterSpec(
Base64.decodeBase64("5D9r9ZVzEYYgha93/aUK2w=="));
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
System.out.println(Base64.encodeBase64String(cipher.doFinal(
plainText.getBytes("UTF-8"))));
这段JavaScript正确地解密了它:
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
var encrypted = CryptoJS.enc.Base64.parse('3Q7r1iqtaRuJCo6QHA9/GhkTmbl4VkitV9ZsD3K2VB7LuBNg4enkJUA1cF8cHyovUH2N/jFz3kbq0QsHfPByCg==');
var key = CryptoJS.enc.Base64.parse('u/Gu5posvwDsXUnV5Zaq4g==');
var iv = CryptoJS.enc.Base64.parse('5D9r9ZVzEYYgha93/aUK2w==');
document.write(CryptoJS.enc.Utf8.stringify(CryptoJS.AES.decrypt(
{ ciphertext: encrypted },
key,
{ mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: iv, })));
</script>
我已经从这个站点编译了一些AES实现代码,它应该执行128位密钥加密。我测试了可以正常工作的加密/解密程序。 然而,如果我用上面提到的代码加密任何东西,然后尝试用linux内置的openssl工具解密,我就是无法解密它,它甚至会记录错误的幻数错误。同样,如果我用openssl加密任何东西,并尝试用代码解密,那么就不会起作用。我试过两个cbc欧洲央行。 如果他们都在实施AES,它不应该以同样的方式工
问题内容: 检索具有特定类的元素数组的最佳方法是什么? 我会使用document.getElementsByClassName,但IE不支持它。 …但是IE仍然说: 对象不支持此属性或方法 有什么想法,更好的方法,错误修复? 我不希望使用任何涉及jQuery或其他“笨拙的javascript”的解决方案。 我知道了! 正如@joe提到的,该函数不是的方法。 因此,工作代码如下所示: …此外, 如果
我正在使用生成cacerts。 然后我使用,但我会遇到这样的例外: 这是兼容性问题吗?使用一个版本的java生成的Cacert是否与另一个版本的java不兼容?
本文向大家介绍javascript中实现兼容JAVA的hashCode算法代码分享,包括了javascript中实现兼容JAVA的hashCode算法代码分享的使用技巧和注意事项,需要的朋友参考一下 在java中一个hashCode算法,可以用来计算一个字符串的hash值,今天一个朋友突然问俺能不能在js中计算hashCode,要求和java的hashCode计算结果一样。 对于java的hash
本文向大家介绍JavaScript的兼容性与调试技巧,包括了JavaScript的兼容性与调试技巧的使用技巧和注意事项,需要的朋友参考一下 关于JavaSctipt的兼容性,最懒的办法就是用jQuery的工具函数。尽量不要用那些什么ECMAScript之类的函数,因为很多浏览器都会报找不到函数的错误。下面列出一些在开发过程中碰到过的javascript问题。 1、参数列表多个逗号。 $.aja
运行以下代码段(在Eclipse中设置了JDK7): 以下异常的结果: java.lang.UnsupportedClassVersionError:org/testfx/framework/junit/applicationtest:不支持major.minor版本52.0在java.lang.ClassLoader.DefineClass1(本机方法)在java.lang.ClassLoade