public String decrypt(byte[] cipherText, SecretKey key, byte [] initialVector) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector);
cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec);
cipherText = cipher.doFinal(cipherText);
return new String(cipherText, "UTF-8");
}
public static byte[] decodeWebSafe(String s) throws Base64DecoderException {
byte[] bytes = s.getBytes();
return decodeWebSafe(bytes, 0, bytes.length);
}
byte[] iv = Base64.decodeWebSafe(enciv);
byte[] salt = Base64.decodeWebSafe(encsalt);
byte[] data = Base64.decodeWebSafe(encdata);
SecretKey key = Security.getExistingKey(password, salt);
String original = aes.decrypt(data, key, iv);
public static SecretKey getExistingKey(String password, byte[] salt) throws Exception{
SecretKey key= null;
KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, 10000, 256);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] keyBytes=new byte[32];
keyBytes = keyFactory.generateSecret(keySpec).getEncoded();
key= new SecretKeySpec(keyBytes, "AES");
return key;
}
附注:这是我们在IOS中设置加密的方式:
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
self.encryptionKey.bytes, kCCKeySizeAES128,
self.encryptionIV.bytes, [rawData bytes], dataLength,
/* input */buffer, bufferSize, /* output */&numBytesEncrypted);
key和IV的推导方法:
(NSData *)keyForPassword:(NSString *)password salt:(NSData *)salt {
NSMutableData *
derivedKey = [NSMutableData dataWithLength:kCCKeySizeAES128];
int result = CCKeyDerivationPBKDF(kCCPBKDF2, // algorithm
password.UTF8String,
password.length,
salt.bytes, // salt
salt.length, // saltLen
kCCPRFHmacAlgSHA1, // PRF
kPBKDFRounds, // rounds
derivedKey.mutableBytes, // derivedKey
derivedKey.length); // derivedKeyLen
}
我可以看到您生成密钥的方式有几个不同之处:
您最好在更好地匹配密钥生成和解密前比较密钥方面投入一些时间。
我做了很多研究,但我找不到我的问题的答案。我在做AES加密(Rijndael块大小128位)。NET和解密在Android(AES)与相同的密码,盐 C#加密代码片段: Android解密代码段: 密码doFinal调用引发以下异常。 “05-02 18:17:38.239:W/System.err(25547):javax.crypto.BadPaddingException:填充块损坏” 我确
我有CMS加密数据使用弹跳城堡,我想解密它的内容。然而,我遇到了获取。我相信,秘密钥匙有问题
我被困在一个问题与AES解密在我的Android应用程序。我已经搜索了很多,但无法得到解决方案。 这是步骤,我正在做的。 用我的密钥加密信用卡号并发送到Web服务器 此外,来自服务器的加密信息与我们以加密格式发送的信息不同。在iPhone应用程序中也做了同样的事情,iPhone能够成功地解密信息。 我使用以下代码进行加密和解密。 请建议。 编辑:我还有一件事,那就是工作
我最近正在研究文件加密/解密。 当我尝试用相同的密钥解密文件时,总是会发生EVP_CipherFinal_ex。 代码片段将在下面发布。 我做错什么了吗? 谢谢你的帮助。 加密 解密 顺便说一句:当我使用CipherInputStream/CipherOutStream时,它会正常工作。我想知道是否可以只使用FileInputStream/FileOutputStream?非常感谢。 编辑:加密功
我尝试解密从Web服务接收的加密数据。 使用AES 128进行加密。 我使用以下代码对数据进行解密: 在 密码doFinal() 我得到了以下例外: javax.crypto.badpaddingexception垫块损坏 我浏览了我的帖子,但没有找到解决办法。我被困在这里了。
我正在从谷歌地图上提取一些数据,但我似乎不能用它做任何事情。下面是我的代码: 你知道我做错了什么吗?