我需要解密一个用AES256加密的字符串。
例如:这是一个加密的字符串:"U2FsdGVkX18egiyzJUY5gHS++2trNSYNSEXpJicKPBE=“,使用这个密钥:”70ca7c5b0b0f58ca290d39613fa3644251“与AES256算法一起使用。
示例字符串已使用以下方法进行加密:
https://code.google.com/p/crypto-js/
有多个工具可用于解密AES256加密字符串:https://github.com/AlanQuatermain/aqtoolkit/tree/master/CommonCrypto
https://github.com/RNCryptor/RNCryptor
https://github.com/Gurpartap/AESCrypt-ObjC
我试过所有这些,但没有一个能破解我的字符串。我确信加密是正确的,因为我可以使用这个在线工具解密它:
http://www.appcove.com/tool/aes
请帮帮我。
谢谢你,乔治
-编辑
您能推荐一种用于API(js)/iOS的对称加密/解密算法吗?用来加密API上的字符串并在您的iOS应用程序中解密它们的东西。
谢谢
发布于 2014-06-11 19:13:52
为了让你开始:
This is an encrypted string: "U2FsdGVkX18egiyzJUY5gHS++2trNSYNSEXpJicKPBE="
这不是加密的字符串。它是加密字节数组的Base64呈现。为了解密它,首先需要将它从Base64转换回字节数组。
using this key: "70ca7c5b0f58ca290d39613fa3644251"
这不是钥匙。它是字节数组的十六进制字符串表示,它要么是实际的键,要么可以用来派生实际的键。您需要将它从十六进制字符串转换回字节数组。
with the AES256 algorithm
您需要更多信息:模式和填充至少。
使用的模式是什么?AES-ECB,AES-CBC,AES-CTR还是其他模式?仔细看看描述,试着找出答案。正如Zaph的评论所指出的那样,缺乏IV或mode可能表明了欧洲央行的模式。欧洲央行模式是不安全的,做,而不是使用它为任何生产代码。
您还需要知道使用了什么填充。Zaph说PKCS7填充是很常见的,但是问题源应该告诉你这一点。您需要设置解密方法以期望得到正确的填充。
发布于 2014-06-11 17:13:24
我将给出一个简单的流程来展示AES是如何工作的:
为了清晰起见,我将使用伪objective来使它既为您所理解,又为我所快。
// Here comes encryption process:
NSString *key = @"fsd7f897sfd8sfds…";
NSString *secretMessage = @"Confidential text";
AES *aes = [AES sharedAES];
NSString *encryptedMessage = [aes encryptWithKey:key message:secretMessage];
// Now is time for decryption:
Base64 *base64 = [Base64 sharedBase64];
NSString *messageToDecrypt = [base64 decode:encryptedMessage];
NSString *decryptedMesage = [aes decryptWithKey:key message:messageToDecrypt];
// Now you should have the result:
NSLog(decryptedMesage);看看http://travistidwell.com/jsencrypt/
发布于 2014-06-11 19:15:43
来自google文档:
对于密钥,当您传递一个字符串时,它被视为一个密码,并用于派生一个实际的密钥和IV,或者您可以传递一个表示实际密钥的WordArray。如果您传递实际密钥,则还必须传递实际的IV。
对于CryptoJS.AES.encrypt()
是一个字符串作为键传入,另一个键将被派生,同时也是一个iv。这将是一个兼容性问题,因为必须知道实际密钥派生的方法以及在iOS中复制的iv派生。
上述任何一项都不是标准。
解决方案是在JavaScript中作为正确大小(256位)的WordArray和WordArray iv传入密钥。
或者根据医生:
“为了与其他密码实现兼容,您可以定义自己的格式。格式是一种对象,它有两种方法--字符串和解析--在CipherParams对象和密文字符串之间进行转换。
然后,在iOS中可以匹配相同的加密/解密。
下面是我发现的一些信息,这是base64编码之前的加密数据:
前8个字节可能是Javascript解密时使用的"Salted__“来知道要使用的方法。
接下来的8个字节是随机的。它们对于具有相同密钥的相同数据的每次加密都是不同的,它们可以从具有随机组件的密钥中派生出来。
下一个字节由16个字节组成(块大小),足以包含数据+填充。填充总是添加至少一个额外的字节。
因为iv是随机的,所以加密的字节对于每一种加密都是不同的,使用、相同的数据和密钥,但是可以通过使用密钥和引导字节来恢复来重新生成密钥和iv。这个方法不是秘密,只是我不知道。
当然,这并没有特别的帮助,但确实显示了问题所在。
https://stackoverflow.com/questions/24168512
复制相似问题