Tag: aes

用盐打开Openssl AES 256 CBC Java Decrypt文件

我已经尝试了几天用java解密用openssl加密的消息。 使用以下命令加密消息: openssl enc -e -aes-256-cbc -kfile $ file.key -in toto -out toto.enc。 文件file.key包含256位的对称密钥。 在命令中没有指定salt,但文件以Salted__开头。 这是我编写的类,试图解密文件,但即使通过删除文件的16个字符即:Salted__ + salt加密,也无法获得任何内容。 我得到错误:线程“main”中的exceptionjavax.crypto.BadPaddingException:给定最终块未正确填充。 有人能帮帮我吗? 非常感谢你。 public class Java { private static SecretKey key = null; private static Cipher cipher = null; public static void main(String[] args) throws Exception { String filename = RESOURCES_DIR + “toto.enc”; byte[] key = Base64.decode(“2AxIw+/AzDBj83OILV9GDpOs+izDFJEhD6pve/IPsN9=”); […]

使用java在客户端解密

我在服务器端加密了会话ID,但是当我尝试在客户端解密会话ID时,会出现一些错误。 请任何人都可以帮助解决错误。 public static String decrypt(String sessionId) { try { Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS5PADDING”); final SecretKeySpec secretKey = new SecretKeySpec(key, “AES”); cipher.init(Cipher.DECRYPT_MODE, secretKey); final String decryptedSessionId = new String(cipher.doFinal(Base64.decodeBase64(sessionId))); return decryptedSessionId; } catch (Exception e) { e.printStackTrace(); } return null; } 即将发生的错误是:JRE仿真库中不存在类’javax.crypto.Cipher’,因此它不能用于“某些”GWT模块的客户端代码中。 此检查报告JDK类的客户端代码中的用法,这在JRE仿真库中不存在。 我使用的加密方法是: public static String encrypt(String sessionId) { try { Cipher cipher = […]

无法在黑莓中解密AES的php代码密文

我正在编写一个使用AES(ECB)模式加密和解密数据的应用程序。 黑莓代码的加密数据通过php代码成功解密。 但问题是当我从php获取加密文本时我无法使用黑莓代码解密它。即使我没有得到任何exception。 这是我加密和解密文本的代码。 public static byte[] encrypt( byte[] keyData, byte[] data ) throws CryptoException, IOException { // Create the AES key to use for encrypting the data. // This will create an AES key using as much of the keyData // as possible. AESKey key = new AESKey( keyData ); // Now, we want […]

ruby-aes默认使用填充吗?

我在RoR项目中使用以下内容: somepass =Aes.encrypt_buffer(128, ‘ECB’, some_cypher_key, nil, pain_string) 使用此lib和方法ECB是否默认使用填充? 我最终要做的是拥有一个RoR应用程序,Java应用程序能够使用相同的简单字符串创建相同的加密字符串。 在Java代码中我使用: cipher = Cipher.getInstance(“AES/ECB/PKCS5Padding”, “SunJCE”); 这两行代码不会创建相同的加密密钥。

Java中的OpenSSL EVP_BytesToKey问题

我正在对一个API进行逆向工程,我发现它使用AES-256-CBC进行加密。 我还发现它使用EVP_BytesToKey来加密HTTP请求。 在我发现这个之后我测试了它但是我遇到了一些问题(可能是因为我没经验)。 我不知道在哪里放密码 这是需要被解密的内容: FP2xttTh/wm5Kr45Vh/PEvsdxgfL3NgxxMMk9hTkPfJd7vSJXTlhjiZlQajnBcMAVknANpv5FNCMRD+epDSOA2epKOzstSmhC0il2TlwgKqaT+97zomCMUCIfdaJYnLz5gBth1MIpxO30bx9zPg8cbOJcLnMmCo3vtSDCalgjHICf5FevI7DgrWnWC1U4wab0rx/rWhGFJ0sOW1ImDi9DkCy+guQZIrojbZxRlvGzv1mU/avP5hbKgWIheJpYQvvM12RyCNuVxjHK/oZ1mCQLVjvpED291lxsGTNHPUrc2NI7LCj/xOztjgsukpBP9K1nsUIgEyfVFUfTf5sh4QPccZnJ1bzKqPD 告诉我钥匙和解密方式的人也给了我这个 REMOVED

AES解密与充气城堡

我试图调整http://www.java2s.com/Code/Java/Security/Basicsymmetricencryptionexample.htm中的示例代码,必须使用3个参数调用,模式(加密或解密),IV和密钥。 它还可以读取和写入特定文件。 到目前为止,我忽略了给定的IV和键,直到我完成其余的运行。 我的代码成功地从文件加密明文,并将密文写入文件,但解密不起作用。 似乎解密模式读取的字节数多于加密写入的字节数,并且我得到块对齐错误。 我确定解密部分的某处存在一些基本错误,但我不知道它是什么。 如果有人能够识别问题或者可以看到任何可能导致它的明显错误,请告诉我。 错误发生在 try{ ctLength += cipher.doFinal(cipherText, ctLength);}catch{IllegalBlockSizeException e) 代码行: import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Security; import java.util.Arrays; import javax.crypto.BadPaddingException; […]

perl CBC DES相当于java

我们正在将一些代码从perl迁移到java / scala,我们遇到了障碍。 我们试图弄清楚如何在Java / scala中执行此操作: use Crypt::CBC; $aesKey = “some key” $cipher = new Crypt::CBC($aesKey, “DES”); $encrypted = $cipher->encrypt(“hello world”); print $encrypted // prints: Salted__ ,% 8XL /1 & n; 쀍c $decrypted = $cipher->decrypt($encrypted); print $decrypted // prints: hello world 我在scala中尝试了一些东西但是并没有真正做到正确,例如: val secretKey = new SecretKeySpec(“some key”.getBytes(“UTF-8”), “DES”) val encipher = Cipher.getInstance(“DES/CBC/PKCS5Padding”); encipher.init(Cipher.ENCRYPT_MODE, secretKey) […]

Java AES解密问题

我的任务是解密使用以下标准加密的Java文件: AES加密算法,128位密钥,ECB模式和PKCS7填充。 加密文件格式为: – 第一个字节为hex0x31 – 指定使用的加密方法(AES为1) – 后跟输入文件的加密字节 我还必须下载文件,所以这是我到目前为止的尝试: 下载代码,我跳过这里的第一个字节,因为它不是必需的,也没有加密: final String PATH = “/sdcard/” + IMEI + “.xml”; //put the downloaded file here try { URL url = new URL(context.getString(R.string.xml_feed) + IMEI + “.xml”); enc_File = new File(PATH); long startTime = System.currentTimeMillis(); /* Open a connection to that URL. */ URLConnection ucon = […]

AES BadPaddingException

如果我使用错误的密钥或错误的盐进行解密,则抛出BadPaddingException。 我希望返回一个不正确的字符串。 doFinal()在decrypt-method中引发exception 消息: This is just an example Unfug: ‘ΩÙΩ„SåF?V®ßs.k˚·ºç€èÀHfif∫ÙÉÕ Exception in thread “main” javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*..) at casino.AES.decryptString(AES.java:130) at casino.AES.main(AES.java:172) public static void main(String[] args) throws Exception { //Encryption AES encr = new AES(); encr.setKey(“KEY”); encr.setSalt(“SALT”); encr.setup(); String message = “This […]

服务器(Java – Cipher)和客户端之间的AES(Javascript – CryptoJS)

我必须在JS中创建一个应用程序,它使用AES对消息进行编码,并通过AJAX将其传递给服务器。 然后服务器使用Java解码消息。 我的问题是: 如何在JS中加密消息并能够使用AES在Java中解密它? 知道java和js之间的通信已经通过webservices建立 客户端,我使用Crypto JS库( http://code.google.com/p/crypto-js/ )。 服务器端我使用Java提供的Cipher类(我使用的是Java Play框架,但这里并不重要)。 我对密码学完全不熟悉。 我整天都在研究,仍然无法完成这项工作。 问题是用于加密和解密消息的密钥必须相同,我不知道如何做到这一点。 从我的搜索中,我了解使用AES有不同的模式。 默认情况下,Java使用ECB而CryptoJS使用CBC这是一个问题,但通过告诉CryptoJS也使用ECB模式,这似乎不太难修复。 但是有一个填充问题,似乎Java中唯一可用的填充和CryptoJS根本没有填充。 但是当我在Java中使用NoPadding时,我得到了一个例外。 但即使我设法解决这个问题,最大的问题是CryptoJS生成的密钥和Java生成的密钥不一样。 如果我用Java加密消息,结果总是相同的,用hex表示。 但是在加密JS中它是在Base64中它永远不会相同…. 我知道这是由密钥生成引起的,这在Java和CryptoJS中是不一样的(然后进入IV和Salt的概念,这对我来说是模糊的)。