如何解密作为服务器响应的文本。
我有以下参数用于使用Rijndael AES算法加密字符串。
passPhrase =“Jxy37Kn @” saltValue =“M9!1lj5” hashAlgorithm =“SHA1” passwordIterations = 2 //整数 initVector =“@ 1B2c3D4e5F6g7H8” keySize = 256 //整数
我从服务器获取的文字是jp9VG27FQYXh + Uvkc9meFw ==
有人可以通过指向一些示例来帮助我解密iOS中的上述文本 代码。
我使用以下代码
const CCAlgorithm kAlgorithm = kCCAlgorithmAES128;
const NSUInteger kAlgorithmKeySize = kCCKeySizeAES256;
const NSUInteger kAlgorithmBlockSize = kCCBlockSizeAES128;
const NSUInteger kPBKDFRounds = 2;
- (NSData *)AESKeyForPassword:(NSString *)password
salt:(NSData *)salt {
NSMutableData *derivedKey = [NSMutableData dataWithLength:kAlgorithmKeySize];
int result = CCKeyDerivationPBKDF(kCCPBKDF2, // algorithm
password.UTF8String, // password
password.length, // passwordLength
salt.bytes, // salt
salt.length, // saltLen
kCCPRFHmacAlgSHA1, // PRF
kPBKDFRounds, // rounds
derivedKey.mutableBytes, // derivedKey
derivedKey.length); // derivedKeyLen
// Do not log password here
NSAssert(result == kCCSuccess,
@"Unable to create AES key for password: %d", result);
return derivedKey;
}
- (void) decryptText
{
NSData *data = [NSData dataFromBase64String:@"jp9VG27FQYXh+Uvkc9meFw=="];
NSData *iv = [@"@1B2c3D4e5F6g7H8" dataUsingEncoding:NSUTF8StringEncoding];
NSData *salt = [@"M9!1lj5" dataUsingEncoding:NSUTF8StringEncoding];
NSData *key = [self AESKeyForPassword:@"Jxy37Kn@" salt:salt];
size_t outLength;
NSMutableData *cipherData = [NSMutableData dataWithLength:data.length + kAlgorithmBlockSize];
CCCryptorStatus result = CCCrypt(kCCDecrypt, // operation
kAlgorithm, // Algorithm
kCCOptionECBMode, // options
key.bytes, // key
key.length, // keylength
iv.bytes,// iv
data.bytes, // dataIn
data.length, // dataInLength,
cipherData.mutableBytes, // dataOut
cipherData.length, // dataOutAvailable
&outLength); // dataOutMoved
if (result == kCCSuccess) {
cipherData.length = outLength;
}
else {
}
NSString *apptStr = [[NSString alloc] initWithData:cipherData encoding:NSASCIIStringEncoding];
NSLog(@"apptStr:%@",apptStr);
}
我在解密“#Ï¢K'xÞ#É¢ç”之后得到这个,我认为这是不正确的。我在这里想念的是什么?
答案 0 :(得分:0)
你不应该解密sha1哈希。它们被设计为单向加密!相反,如果您需要密码,让我们说进行身份验证,您应该让用户输入密码信息,然后将其发送到服务器然后哈希文本的服务器。然后它应该检查您发送到服务器的密码(现在已经散列),而不是之前已经散列过的版本,如果有效,则返回给您的应用程序“成功”消息。由于sha1始终是相同的算法,它应该匹配!
注意:如果您只能收到密码短语,并且无法更改密码管理方式,您可以通过sha1 hashing in objective-c执行相同的操作并与密码进行比较。