Tag: aes

CryptoAPI C ++使用AES与Java互操作

我正在尝试使用CryptoAPI在C ++中加密并使用SunJCE解密Java。 我已经获得了RSA密钥 – 并在测试字符串上进行了validation。 但是,我的AES密钥不起作用 – 我得到javax.crypto.BadPaddingException: Given final block not properly padded 。 C ++加密: // init and gen key HCRYPTPROV provider; CryptAcquireContext(&provider, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT); // Use symmetric key encryption HCRYPTKEY sessionKey; DWORD exportKeyLen; CryptGenKey(provider, CALG_AES_128, CRYPT_EXPORTABLE, &sessionKey); // Export key BYTE exportKey[1024]; CryptExportKey(sessionKey, NULL, PLAINTEXTKEYBLOB, 0, exportKey, &exportKeyLen); // skip […]

加密在唯一文件中附加IVSBytes的文件 – 执行:给定最终块未正确填充

我正在尝试使用带有SHA-256密钥的AES加密文件。 当我生成IV时,我在加密文件的开始时预先加上它,然后追加其余的。 当我恢复IV并比较它(IV后的过程和后来的过程)它们是相同的。 问题是当我尝试解密文件时: javax.crypto.BadPaddingException:给定最终块未正确填充 我想这可能是因为我没有正确读取以下字节,但我修改了代码,看起来好了。 加密类: private static String password; private static String salt; private static int pswdIterations = 65536 ; private static int keySize = 256; private byte[] ivBytes; public void encryptOfFile(byte[] bytes, File out) throws Exception { byte[] saltBytes = salt.getBytes(“UTF-8”); System.out.println(“Salt bfre:” +salt); // Derive the key SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”); […]

从套接字创建密码流时应用程序死锁

我在两个套接字之间加密和解密我的流时遇到问题。 ObjectInputStream oIn = new ObjectInputStream(new FileInputStream(new File(“key”))); SecretKeySpec spec = (SecretKeySpec) oIn.readObject(); //’key’ file was saved previously Cipher cEncrypt = Cipher.getInstance(“AES”); cEncrypt.init(Cipher.ENCRYPT_MODE, spec); Cipher cDecrypt = Cipher.getInstance(“AES”); cDecrypt.init(Cipher.DECRYPT_MODE, spec); //should have no problems here, I tried the ciphers out by encoding and decoding a String, works fine ObjectOutputStream objectOutputStream= new ObjectOutputStream(new CipherOutputStream(socket.getOutputStream,cEncrypt)); objectOutputStream.flush(); ObjectInputStream […]

AES 256-CBC上的密钥和iv问题

我从Python获得了加密的base64字符串。 格式为AES 256 CBC,但是当我尝试使用Android解密时,它将解密的字符串作为nil返回。 python # coding=utf-8 import base64 from random import choice from string import letters try: from Crypto import Random from Crypto.Cipher import AES except ImportError: import crypto import sys sys.modules[‘Crypto’] = crypto from crypto.Cipher import AES from crypto import Random class AESCipher(object): def __init__(self, key): self.bs = 32 self.key = key def […]

尝试加密字符串时为什么会出现BadPaddingException?

我通过此链接创建了一个Encryption类来Encryption /解密我的Android项目中的二进制数据。 package com.my.package; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; // TODO Incomplete class public class Encryption { private static final byte[] salt = { (byte) 0xA4, (byte) 0x0B, (byte) 0xC8, (byte) 0x34, (byte) 0xD6, (byte) 0x95, (byte) 0xF3, (byte) 0x13 }; private static int BLOCKS = 128; private static byte[] […]

没有正确加密和解​​密

我写的以下AES类用于加密和解密,这有点时髦。 当我复制AES对象并且我选择加密纯文本,然后我立即尝试解密我刚刚加密的文本时,它不会完全解密(并且每次都有不同的方式)。 例如,我正在使用这样的简单JSP初始化它: <% String hexMessage = "0xe800a86d90d2074fbf339aa70b6d0f62f047db15ef04c86b488a1dda3c6c4f2f2bbb444a8c709bbb4c29c7ff1f1e"; String keyText = "12345678abcdefgh";//*/ AES e = new AES(); //e.setKey(keyText); String plaintext = "This should decode & encode!"; String ciphertext = e.encrypt(plaintext); out.println(ciphertext); out.println("”); out.println(e.decrypt(ciphertext)); %> 输出因页面加载而异:一次: 0x663D64E6A0AE455AB3D25D5AF2F77C72202627EBA068E6DEBE5F22C31 This should decoÁdìmèåV4ÉkÓ 另一个: 0x5F5CF31961505F01EA9D5B7D7BFC656BD3117725D2EA041183F48 This s2??XêêÈ&ÀܧF?ÒDÒ? 等等: 0xC7178A34C59F74E5D68F7CE5ED655B670A0B4E715101B4DDC2122460E8 Tà@¼R×ËÖ?_U?xÎÚ?Ba?b4r!©F 我创建的课程如下: package com.myclass.util; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; […]

AES解密方法出错

我有解密的真正问题,不知道如何解决这个’java.crypto.BadPaddingException’。 我有一个类似的以前的系统工作得很好,现在我已经停止了上周。 我已经阅读了很多stackoverflow线程,但没有一个能真正解决我的问题…除非当然,我根本就不理解它。 我的问题出现在login方法中,它说: byte[] decrypted = cipher.doFinal(p.getBytes()); public void register() { // ENCRYPT PASSWORD try { String key = username; // 128bit key (16*8) String text = password; // CREATE KEY AND CIPHER Key aesKey = new SecretKeySpec(key.getBytes(), “AES”); Cipher cipher = Cipher.getInstance(“AES”); // ENCRYPT THE TEXT cipher.init(Cipher.ENCRYPT_MODE, aesKey); byte[] encrypted = cipher.doFinal(text.getBytes()); System.out.println(“Encrypted: […]

点击率模式下的AES加密(Java)

我有这些信息: CTR键:36f18357be​​4dbd77f050515c73fcf9f2 CTR Ciphertext 1:69dda8455c7dd4254bf353b773304eec0ec7702330098ce7f7520d1cbbb20fc3 \ 88d1b0adb5054dbd7370849dbf0b88d393f252e764f1f5f7ad97ef79d59ce29f5f51eeca32eabedd9afa9329 请注意,16字节加密IV是随机选择的,并且是在密文之前。 并且在CTR模式下使用AES加密文本。 我必须发现明文为了做到这一点,我写了一个简短的Java程序,但它不起作用,我找不到原因:/ 这是Java程序 import java.nio.charset.Charset; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class AES { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //Dernier exemple CTR mode //Clé 16 bits byte[] keyBytes = new byte[] […]

使用Base64的AES会为同一纯文本生成不同的加密结果吗?

这是一个名为test()的示例虚拟代码,我运行了100K次,我得到了相同纯文本的不同加密消息(显然,我得到的解密是原始纯文本)。 我想这背后的原因是避免频率; 但是为什么一个解密会有多少加密呢? 不应该是一比一吗? public static void test() { String plainMessage = “I’m gonna bid 100 USD on this project”; String password = “A99922000001000004581F0F0CCD0000”; Set set = new HashSet(); for (int x=0; x”+set.size()); //just to make sure they are all unique } 加密 public static String encryptMessage(final String plainMessage, final String symKeyHex) { final byte[] […]

如何处理AES CTR的IV / Nonce / Counter?

import javax.crypto.Cipher; public abstract class Crypto { private static final String CIPHER_ALGORITHM = “AES/CTR/NoPadding”; private String AesKeyString = “ByWelFHCgFqivFZrWs89LQ==”; private void setKey() throws NoSuchAlgorithmException{ byte[] keyBytes; keyBytes = Base64.getDecoder().decode(AesKeyString); aesKey = new SecretKeySpec(keyBytes, “AES”); } protected byte[] execute(int mode, byte[] target, byte[] iv) throws Exception{ Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); IvParameterSpec ivSpec = new IvParameterSpec(iv); cipher.init(mode, […]