草庐IT

Java 7 -> Java 8 : AES Causes exception: "BadPaddingException: Given final block not properly padded" in conjunction with BufferedReader & ZipStreams

我们使用以下语句实例化密码:Ciphercipher=Cipher.getInstance("AES");SecretKeySpeckey=newSecretKeySpec(cipherKey,"AES");这在Java7(1.7_45)中有效,但在Java8(1.8_25)中不再有效。我们将cipher传递给CipherInputStream并使用流来读取/写入数据。实际异常发生在close期间。编辑:快速查看JDK代码会发现BadPaddingException被重新抛出,在7中它被忽略了:JDK7:CipherInputStream.close:try{this.cipher.d

Java AES 加盐加密

好吧,事实证明我不擅长加密/解密。我只是不明白。如何使Java使用AES加密将Stringmessage1="helloworld";和Stringsalt="mySalt";加密?加密后如何解密?如果您有时间提供最基本的代码,那将对我有很大帮助。还有1个关于AES加密的一般问题,使用相同的盐,相同的消息是否总是具有相同的加密?提前致谢。 最佳答案 AES没有盐的概念。它只需要数据和一个key。对于相同的输入,它总是会产生相同的输出。如何将您的信息与盐结合起来取决于您。字符串连接可能就足够了。但请注意,盐对于AES之类的东西并没有多

java - CipherInputStream 仅读取 16 个字节 (AES/Java)

我正在使用CipherInputStream和CipherOutputStream来使用AES加密文件。encrypt(...)似乎工作正常,但我的decrypt(...)函数只解密文件的前16个字节。这是我的类(class):publicclassAESFiles{privatebyte[]getKeyBytes(finalbyte[]key)throwsException{byte[]keyBytes=newbyte[16];System.arraycopy(key,0,keyBytes,0,Math.min(key.length,keyBytes.length));returnk

java - 无效的 AES key 长度 : 128 bytes?

我收到java.security.InvalidKeyException:InvalidAESkeylength:128bytesCIPHER.init(Cipher.ENCRYPT_MODE,keySpec);密码为CipherCIPHER=Cipher.getInstance("AES");和keySpecSecretKeySpeckeySpec=newSecretKeySpec(key,"AES");那个key是一个长度为128的byte[]我通过Diffie-Hellmankey交换获得(虽然我从哪里得到它应该不重要,对吧?),key完全由非零字节填充为什么Cipher.ini

java - 使用 AES-256 Java 加密

我有这个简单的代码,是我在互联网上找到的。我正在学习加密/解密的东西。这个代码似乎工作正常,但我不明白......为什么在“c.doFinal()”(用于使用AES-256进行加密/解密)这家伙使用BASE64编码/解码该加密值?仅使用AES还不够吗?`privatestaticfinalStringALGO="AES";privatestaticfinalbyte[]keyValue=newbyte[]{'T','h','e','B','e','s','t','S','e','c','r','e','t','K','e','y'};publicstaticStringencrypt(

java - 算法错误 : AES or Rijndael required

我是JAVA新手。我要为我的项目构建一个安全系统。但是,我遇到了一个问题。Eclipse总是指出“java.security.InvalidKeyException:错误的算法:需要AES或Rijndael”。我将把加密key保存在数据库中。我已经检查过key是否正确。唯一的问题是我无法解密密文。谁能告诉我问题出在哪里?实际上,我已经搜索了一些解决方案,但问题仍未解决。请帮我。非常感谢!importjava.io.IOException;importjava.security.NoSuchAlgorithmException;importjava.sql.Connection;impo

Java cipher.doFinal() 写入额外的字节

我正在使用JavaCipher和AES实现加密/解密。除了在调用doFinal()时多写了5个字节外,一切都运行良好。因此,我最终得到了一个正确解码的字符串,并附加了5个额外的字节。我认为原因是正在写入整个16字节block。我看到写入了3个16字节的block,包括最后一个。输入的加密文件为64字节。未加密的文本应为43个字节。doFinal的文档表明它可以返回写入输出缓冲区的字节数。但是,它是0,16,16,16。我已经尝试了各种形式的doFinal和更新,但行为没有任何变化。它写出一个完整的block在某种程度上是有道理的,因为大多数这些算法都是这样运行的。但是,如果它不告诉我输

java - 使用 Java 的 AES 加密和使用 Javascript 的解密

我正在制作一个需要基于Java的AES加密和基于JavaScript的解密的应用程序。我使用以下代码作为基本形式进行加密。publicclassAESencrp{privatestaticfinalStringALGO="AES";privatestaticfinalbyte[]keyValue=newbyte[]{'A','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};publicstaticStringencrypt(StringData)throwsException{Keykey=generateKey(

java - 如何将 Bouncy CaSTLe 轻量级 API 与 AES 和 PBE 结合使用

我有一个使用JCE算法“PBEWithSHA256And256BitAES-CBC-BC”创建的密文block。提供者是BouncyCaSTLe。我想做的是使用BouncyCaSTLe轻量级API解密此密文。我不想使用JCE,因为这需要安装UnlimitedStrengthJurisdiction策略文件。当谈到将BC与PBE和AES结合使用时,文档似乎很少。这是我目前所拥有的。解密代码无一异常(exception)地运行但返回垃圾。加密代码,Stringpassword="qwerty";StringplainText="helloworld";byte[]salt=generate

java - 使用对称 key (AES -128) 签署和验证消息

我想知道对称key可以用来签署消息吗?我们可以使用共享key进行加密。还有当使用对称key签名时,JAVA中可以使用什么API来加载key并对消息进行签名?如果我使用java.security中的Signature,它有一个apiinitSign,但它将公钥/私钥对中的私钥作为参数来签署消息。这里的key是对称key。有什么建议吗? 最佳答案 共享key可用于计算MessageAuthenticationCode(MAC),然后可用于向知道相同共享secret的另一方确认消息的完整性和真实性。与使用私钥创建并使用公钥验证的数字签名不