我尝试解密最初使用Java中的Objective-C加密的数据。
还有其他问题要提及,但是它们确实很混乱,许多问题还没有解决,因此我将发表自己的问题。
这是加密数据的代码:
- (int) encryptWithKey: (NSString *) key
{
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char * keyPtr[kCCKeySizeAES128+1]; // room for terminator (unused)
bzero( keyPtr, sizeof(keyPtr) ); // fill with zeroes (for padding)
// fetch key data
[key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF8StringEncoding];
// encrypts in-place, since this is a mutable data object
size_t numBytesEncrypted = 0;
CCCryptorStatus result = CCCrypt( kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES128,
NULL /* initialization vector (optional) */,
[self mutableBytes], [self length], /* input */
[self mutableBytes], [self length]+32, /* output */
&numBytesEncrypted );
return numBytesEncrypted;
}
我执行此功能,并使用以下代码将结果数据写入光盘:
NSString* strTest = @"Hallo Welt!";
NSLog(@"strTest = %@", strTest);
NSMutableData *protectedData = [NSMutableData dataWithData:[strTest dataUsingEncoding:NSUTF8StringEncoding]];
int laenge = [protectedData encryptWithKey:@"keykeykeykeykeykeykeykey"];
NSData* dataOutput = [[NSData alloc] initWithBytes:[protectedData bytes] length:laenge];
[dataOutput writeToFile:@"/encryptedFileObjC" atomically:YES];
在Java中,我使用以下代码来尝试实现相同的行为:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
String keyString = "keykeykeykeykeykeykeykey";
byte[] keyBytes = keyString.getBytes("UTF-8");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "AES"),
new IvParameterSpec(new byte[16]));
byte[] resultBytes = cipher.doFinal("Hallo Welt!".getBytes("UTF8"));
FileOutputStream out =
new FileOutputStream(new File("encryptedFileJava"));
out.write(resultBytes);
out.close();
如果现在尝试解密通过Objective-C加密的文件,则会收到错误的填充异常。如果我打开两个带有加密内容的文件,它们将不同:
哈罗·威尔特!用Java加密:96 C5 CB 51 39 B5 27 FB B3 93 BF 92 18 BB 16 9B
你好!用ObjC加密:A3 61 32 8E A5 E6 66 E0 41 64 89 25 62 D3 21 16
文件内容不应该相同吗?我想我没有两种语言的算法所有参数都相同。
我需要更改Java代码以获得与Objective-C代码相同的结果,以便能够解密使用Objective-C加密的某些数据。
编辑: 另一个问题:
我正在尝试使用KMS和AWS加密SDK加密数据。查看AWS文档中提供的示例,似乎没有地方可以显式设置数据键。 使用由KMS生成的数据密钥使用AWS加密SDK加密数据的推荐方法是什么?
问题内容: 我正在制作一个需要基于Java的AES加密和基于JavaScript的解密的应用程序。我正在使用以下代码作为基本形式进行加密。 我试图用来解密的JavaScript是 但是JavaScript解密无法正常工作。我是新手,有人可以告诉我一种无需更改Java代码块即可解决的方法吗? 我尝试使用Base-64解码文本,如下所示: 但还是不好 我尝试了以下建议的解决方案来解决可能的填充问题,但
问题内容: 有没有一种方法可以解密Java中的密码。Java将算法实现为。我得到了创建密码哈希的代码。我在下面提到了哈希技术的链接: http://howtodoinjava.com/security/how-to-generate-secure-password-hash- md5-sha-pbkdf2-bcrypt-examples/ 我的要求是以加密格式存储第三方FTP服务器密码,并在需要登
问题内容: 有人要求我用PHP解密使用以下Java类加密的字符串。 我不懂Java,因此我需要一些帮助来理解这种加密。 1)这行是什么意思? 2)我应该为第一个参数使用什么值 3)什么时候应该在我的php脚本中使用MD5? 问题答案: 1)它创建用于基于密码的加密的参数,哈希计算中包含的盐和哈希算法执行的迭代次数(在其自身的输出中)。它用于击退彩虹表攻击,基本上,攻击者必须经过相同的迭代次数才能检
这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。
问题内容: 我正在连接一个旧的Java应用程序(无法更改该应用程序),该应用程序正在使用AES加密数据。这是原始Java代码如何实例化AES密码: 我是C / C ++开发人员,而不是Java,但是从我可以看出来的传统Java代码中,既没有指定模式,也没有指定初始化向量。有人偶然知道默认情况下将使用什么Java,因为未指定它? 我们需要新的C / C ++应用程序来解密Java加密的数据。但是我不