当前位置: 首页 > 知识库问答 >
问题:

解密iOS中使用aescrypt.com中的工具加密的AES文件

卫飞
2023-03-14

我正在开发一个应用程序,其中包括播放声音文件。我的问题是声音文件是用一个命令行工具加密的,这个工具可以在Aescrypt.com上找到,只是提供文件和密码。我用Aescrypt.com上的Java代码成功解密了android应用程序中的文件,但我无论如何也不能让它在iOS上不起作用。

我已经尝试解密文件的所有字节和不包括文件头的字节。我得到一个字节的结果集,但它不会播放,估计的声音长度大约是实际长度的四分之一。

NSRange range = NSMakeRange(0, self.length);
unsigned char* encrypteddata = malloc(range.length);
[self getBytes:encrypteddata range:range];
size_t outSize;
unsigned char* result = malloc(range.length + 16);
CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, 0x00, decryptkey, sizeof(decryptkey), nil, encrypteddata, self.length, result, self.length + 16, &outSize);
NSData *returnData = nil;
if (status == kCCSuccess) {
    returnData = [NSData dataWithBytesNoCopy:result length:outSize];
}

decryptkey只是用于加密文件的密码的字节。

我已经为一个解决方案工作了至少一个星期,现在没有取得任何进展。有那么多事情可以做错,有那么多可能(和不可能)的组合。

更新:我需要的是一个工具,它足够简单,让我们的客户可以使用它来加密他们端的声音文件,也可以让Android和iOS上的应用程序在另一端进行解密。它不需要非常安全,它只需要防止Android上的普通用户只是打开和播放文件从光盘。如果Aescrypt.com工具在这方面不是最佳的,我很乐意欢迎其他建议。

共有2个答案

杜嘉慕
2023-03-14

为什么你坚持AESCrypt应用程序?它们将自定义头写入加密文件。他们分发源代码,这将为您提供关于如何解密这些信息的足够信息(并且,可能您将能够重用他们的源代码)。在AES加密源代码中检查他们的AesCryptWorkerThreads.cpp。

锺离伟彦
2023-03-14

AESCrypt格式携带重要的配置信息。他们的站点(aes_file_format.html)详细介绍了大部分格式。不幸的是,本页没有解释他们的自定义KDF。您必须在aescrypt.c中使用或反向工程它们的encrypt_stream函数:

// Hash the IV and password 8192 times
memset(digest, 0, 32);
memcpy(digest, IV, 16);
for(i=0; i<8192; i++)
{
    sha256_starts(  &sha_ctx);
    sha256_update(  &sha_ctx, digest, 32);
    sha256_update(  &sha_ctx,
                    (unsigned char*)passwd,
                    (unsigned long)passlen);
    sha256_finish(  &sha_ctx,
                    digest);
}

他们不使用CommonCryptor,所以如果您想要硬件优化的代码,您将不得不自己在CommonCryptor中重新实现这种格式。

请注意,您的解密代码没有IV、KDF和HMAC,因此任何以这种方式加密的代码都是非常不安全的。AESCrypt确实提供了适当的IV和HMAC,并且它的KDF可能是安全的,尽管它是非标准的,所以它是一个合理的选择。

 类似资料:
  • 问题内容: 我一直在寻找一个解决方案,并在Node.js服务器和Objective-C客户端上进行加密,反之亦然,使用AES(或其他合适的方法)进行搜索 我对密码学还比较陌生,因此我无法理解为什么每种语言的加密文本都不同。 这是我到目前为止的内容: 使用此CryptoJS库的 Node.js加密方法 -node-cryptojs-aes 使用AESCrypt库的 Objective-C加密方法 多

  • 问题内容: 我正在尝试使用Java Cryto在Java中进行简单的AES加密,然后可以使用OpenSSL在ObjectiveC中对其进行解密。 因为我没有在ObjectiveC方面进行操作,所以我想使用openSSL命令行确保它可以正常工作,但是我总是会收到“错误的魔术数字” 这是我的Java代码 现在可以按预期运行,文件“ test-encrypted.txt”确实已加密,并且“ test-d

  • 问题内容: 我一直在尝试使用AES-128 CBC解密字符串,该字符串最初是使用JAVA AES加密加密的。在Java中,使用PKCS7填充。而且我尝试使用类似的PHP代码进行加密和解密。但是我得到了不同的结果。 我的Java代码 以及我正在使用的等效PHP代码。 在Java中 纯文本= 123456 密码文本= tpyxISJ83dqEs3uw8bN / + w =​​= 在PHP中 纯文本=

  • 我一直在尝试使用AES-128 CBC解密一个字符串,它最初是使用JAVA AES加密加密的。在java中,使用了PKCS7填充。我试着用类似的PHP代码进行加密和解密。但我得到了不同的结果。 我的Java代码 以及我正在使用的等效PHP代码。 在Java 纯文本=123456 密码文本=tpyxISJ83dqEs3uw8bN/w== 在PHP中 纯文本=123456 密码文本=ierqftckt

  • 问题内容: 我有一个现有的网络服务,可以使用AES进行加密和解密,现在我必须以与Java相同的方式进行加密,但是要使用javascript。我已经阅读了有关在javascript中执行此操作的所有主题,但尚未找到任何有用的解决方案。Javascript总是以不同的方式加密,我找不到原因。 这是现有的java代码: 这是我倾向于使用的javascript代码,但是提供了不同的加密(CryptoJS)

  • 我尝试在android中加密,在nodejs服务器中解密。我生成了一个AES 128位密钥,并使用AES算法对其进行加密,然后使用RSA算法对生成的密钥进行加密。然后将两者都发送到服务器。但是在服务器端解密时,我认为RSA解密工作正常,但在AES解密中有一个问题。我在服务器端没有收到我在客户端加密的字符串。 这是android端加密的代码: 然后把这个发到服务器端 服务器端的代码如下所示: 这里的