Tag: aes

Java AES CBC解密

PHP加密function $privateKey = “1234567812345678”; $iv = “1234567812345678”; $data = “Test string”; $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv); echo(base64_encode($encrypted)); Result: iz1qFlQJfs6Ycp+gcc2z4w== 当我尝试使用下面的函数在Java中解密此结果时,我得到的所有内容都是ì š@ÔBKxnfÈ~¯Ô’M而我期待“测试字符串”。 我错的任何想法? 谢谢 public static String decrypt() throws Exception{ try{ String Base64EncodedText = “iz1qFlQJfs6Ycp+gcc2z4w==”; String decodedText = com.sun.xml.internal.messaging.saaj.util.Base64.base64Decode(Base64EncodedText); String key = “1234567812345678”; String iv = “1234567812345678”; javax.crypto.spec.SecretKeySpec keyspec = new javax.crypto.spec.SecretKeySpec(key.getBytes(), “AES”); javax.crypto.spec.IvParameterSpec […]

如何在Java中生成一次密钥并在2个不同的程序中使用该密钥

我的目标是编写一个Java程序来使用AES algorithm加密文本文件( cipher text )。 然后,编写另一个程序来解密该加密文件( cipher text )以获取纯文本。 我想使用相同的密钥(相同的密钥,生成一次,保存在某处,并在加密和解密程序中使用它)进行加密和解密过程。 如果我生成密钥并在同一程序中逐行进行加密和解密,那么它可以完美地工作。 以下是该工作代码段: String strDataToEncrypt = new String(); String strCipherText = new String(); String strDecryptedText = new String(); KeyGenerator keyGen = KeyGenerator.getInstance(“AES”); keyGen.init(128); SecretKey secretKey = keyGen.generateKey(); Cipher aesCipher = Cipher.getInstance(“AES”); aesCipher.init(Cipher.ENCRYPT_MODE,secretKey); strDataToEncrypt = “any text input”; byte[] byteDataToEncrypt = strDataToEncrypt.getBytes(); byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt); strCipherText […]

在Java中使用AES-128进行加密

我使用AES-128 / ecb / PKCS5Padding + base64对数据进行ecrypting有问题。 我使用以下代码加密我的数据: String input = “{\”action\”:\”getQuestion\”}”; String key = “4288f0b8060ca1b682bf795f2617cfdc”; byte[] data = input.getBytes(); byte[] encrypted = null; byte[] keyBytes = new BigInteger(key, 16).toByteArray(); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, “AES”); Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, keySpec); encrypted = cipher.doFinal(data); System.out.println(Base64.encodeBytes(encrypted)); 我在加密后收到6GuKXA6FFR+yMmO8ksAEOLL5e574a5tLob7tt5IG+jk=但我无法使用PHP函数在服务器上解密。 当我使用PHP函数加密这些数据时: function encrypt($encrypt, $key=null) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, […]

如何使用’-naltalt’参数解密AES加密文件

我是加密新手。 这个问题是我以前的问题。 我有一个用OpenSSL util加密的文件: openssl aes-256-cbc -in fileIn -out fileOUT -p -k KEY 我正在使用此代码来解密它: byte[] encrypted = IOUtils.toByteArray(inputStream); Security.addProvider(new BouncyCastleProvider()); String password = “abc”; Cipher c = Cipher.getInstance(“AES/CBC/PKCS5Padding”, “BC”); // Openssl puts SALTED__ then the 8 byte salt at the start of the // file. We simply copy it out. byte[] salt = new byte[8]; […]

密码:IllegalBlockSizeException的原因是什么?

当我使用Cipher时,我观察到以下内容。 加密代码: Cipher aes = Cipher.getInstance(“AES”); aes.init(Cipher.ENCRYPT_MODE, generateKey()); byte[] ciphertext = aes.doFinal(rawPassword.getBytes()); 解密代码: Cipher aes = Cipher.getInstance(“AES”); aes.init(Cipher.DECRYPT_MODE, generateKey()); byte[] ciphertext = aes.doFinal(rawPassword.getBytes()); 在运行Decrypt代码时,我得到IllegalBlockSizeException(输入长度​​必须是16的倍数)。 但是,如果我将解密代码更改为 Cipher aes = Cipher.getInstance(“AES/ECB/PKCS5Padding”); //I am passing the padding too aes.init(Cipher.DECRYPT_MODE, generateKey()); byte[] ciphertext = aes.doFinal(rawPassword.getBytes()); 它工作正常。 我知道它是模式algorithm/mode/padding 。 所以我认为这是因为我没有提到填充。 所以我尝试在加密过程中给出模式和填充, 加密代码: Cipher aes = Cipher.getInstance(“AES/ECB/PKCS5Padding”);//Gave padding during encryption too […]

PHP Java AES CBC加密不同的结果

PHPfunction: $privateKey = “1234567812345678”; $iv = “1234567812345678”; $data = “Test string”; $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv); echo(base64_encode($encrypted)); Result: iz1qFlQJfs6Ycp+gcc2z4w== Java函数 public static String encrypt() throws Exception{ try{ String data = “Test string”; String key = “1234567812345678”; String iv = “1234567812345678”; javax.crypto.spec.SecretKeySpec keyspec = new javax.crypto.spec.SecretKeySpec(key.getBytes(), “AES”); javax.crypto.spec.IvParameterSpec ivspec = new javax.crypto.spec.IvParameterSpec(iv.getBytes()); javax.crypto.Cipher cipher […]

AES加密IV

我在下面使用这个(E.1)作为我的应用程序,显然有一个巨大的安全漏洞,我认识并理解。 我对加密越来越感兴趣,想要更好地理解它,我需要生成一个随机密钥和一个IV,但我不确定如何正确地做到这一点有人可以向我解释熟悉AES加密的人如何工作(IV&KEY )所以我将来能够更好地理解并且可以运用我的知识,本质上我只是想让代码更安全,谢谢。 (E.1) byte[] key = “mykey”.getBytes(“UTF-8”); private byte[] getKeyBytes(final byte[] key) throws Exception { byte[] keyBytes = new byte[16]; System.arraycopy(key, 0, keyBytes, 0, Math.min(key.length, keyBytes.length)); return keyBytes; } public Cipher getCipherEncrypt(final byte[] key) throws Exception { byte[] keyBytes = getKeyBytes(key); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, “AES”); IvParameterSpec ivParameterSpec = […]

在Java中为AES生成随机IV

我正在为Android中的PBE实现和AES加密引擎,我发现了两种方法来实现IV的创建,我想知道哪个更好,更安全,以获得IvParameterSpec : 方法#1: SecureRandom randomSecureRandom = SecureRandom.getInstance(“SHA1PRNG”); byte[] iv = new byte[cipher.getBlockSize()]; randomSecureRandom.nextBytes(iv); IvParameterSpec ivParams = new IvParameterSpec(iv); 方法#2: AlgorithmParameters params = cipher.getParameters(); byte[] iv2 = params.getParameterSpec(IvParameterSpec.class).getIV(); ivParams = new IvParameterSpec(iv2);

使用Java和PHP进行AES加密

我最近在Java中使用AES算法来加密文本。 现在我需要在PHP中重建该算法,但我不知道如何,因为互联网上的PHP算法会返回不同的结果。 也许你可以帮助我。 这是要加密的Java代码: private static final String KEY = “57238004e784498bbc2f8bf984565090”; public static String encrypt(final String plaintext) throws GeneralSecurityException { SecretKeySpec sks = new SecretKeySpec(hexStringToByteArray(KEY), “AES”); Cipher cipher = Cipher.getInstance(“AES”); cipher.init(Cipher.ENCRYPT_MODE, sks, cipher.getParameters()); byte[] encrypted = cipher.doFinal(plaintext.getBytes()); return byteArrayToHexString(encrypted); } public static byte[] hexStringToByteArray(String s) { byte[] b = new byte[s.length() / 2]; for (int […]

是什么导致错误“java.security.InvalidKeyException:参数缺失”?

我正在尝试使用AES加密和解密字符串,但收到错误我不知道如何解决。 这是代码: public class EncryptionTest{ public static void main(String[] args) { String encrypt = new String(encrypt(“1234567890123456”)); System.out.println(“decrypted value:” + (decrypt(“ThisIsASecretKey”,encrypt))); } public static String encrypt(String value) { try { byte[] raw = new byte[]{‘T’, ‘h’, ‘i’, ‘s’, ‘I’, ‘s’, ‘A’, ‘S’, ‘e’, ‘c’, ‘r’, ‘e’, ‘t’, ‘K’, ‘e’, ‘y’}; SecretKeySpec skeySpec = new SecretKeySpec(raw, “AES”); […]