Ios Asi HTTP请求失败
我正在使用AES加密算法(ECB)和ASI http库,但由于401未经授权,我的请求已失败。 我在下面附上了我的代码 加密算法(AES 128加密) 解密算法(AES 128解密) 基本64算法Ios Asi HTTP请求失败,ios,objective-c,iphone,encryption,aes,Ios,Objective C,Iphone,Encryption,Aes,我正在使用AES加密算法(ECB)和ASI http库,但由于401未经授权,我的请求已失败。 我在下面附上了我的代码 加密算法(AES 128加密) 解密算法(AES 128解密) 基本64算法 - (NSString *)base64EncodedString { size_t outputLength; char *outputBuffer = NewBase64Encode([self bytes], [self length], true, &o
- (NSString *)base64EncodedString
{
size_t outputLength;
char *outputBuffer =
NewBase64Encode([self bytes], [self length], true, &outputLength);
NSString *result =
[[[NSString alloc]
initWithBytes:outputBuffer
length:outputLength
encoding:NSASCIIStringEncoding]
autorelease];
free(outputBuffer);
return result;
}
请做必要的事。
提前感谢这里有一个基本的加密/解密方法。钥匙的长度必须正确。值上下文是
kCCEncrypt
或kccdccrypt
将字符串转换为数据,加密/解密数据,然后转换回所需的任何格式。对于Base64编码,请使用NSData
提供的方法
问题是PKCS7Padding用于加密,但不用于解密,这两种方法都需要相同
+ (NSData *)doCipher:(NSData *)dataIn
key:(NSData *)symmetricKey
context:(CCOperation)encryptOrDecrypt
error:(NSError **)error
{
CCCryptorStatus ccStatus = kCCSuccess;
size_t cryptBytes = 0;
NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES128];
ccStatus = CCCrypt( encryptOrDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
symmetricKey.bytes,
kCCKeySizeAES128,
nil,
dataIn.bytes, dataIn.length,
dataOut.mutableBytes, dataOut.length,
&cryptBytes);
if (ccStatus == kCCSuccess) {
dataOut.length = cryptBytes;
}
else {
if (error) {
*error = [NSError errorWithDomain:@"kEncryptionError" code:ccStatus userInfo:nil];
}
dataOut = nil;
}
return dataOut;
}
是什么让你认为问题在于加密?密钥的十六进制转储、数据输入和输出在哪里?ECB确实不安全,尤其是图像,但有代码设置静脉注射。即使作者建议不要使用ASI,你为什么要使用ASI,因为AFNetworking是最新的,并且正在积极维护。苹果公司提供的第三方Base64代码为什么要使用?为什么不使用ARC?我想大部分问题都可以通过选择第三方项目来回答,选择更好、更新的项目。RNCryptor是最新的,可能适合您的需要。感谢您的回复,但已经在php端实现了ECB,因此我无法使用CBC,否则php服务器无法解密我的请求。由于unicodes,我的请求已失败,因此是否有替代方案来实现RNCryptor的ECB?加密是基于数据的,您可以将字符串转换为数据,并对数据进行加密/解密,然后再转换回所需的任何格式。我尝试了您的方法,但相同的响应请求仍然失败:(明白了。状态代码:401,状态消息:HTTP/1.1 401 Unauthorized您需要真正检查API,确切地检查所需内容。我认为服务器端API可能有问题。
- (NSString *)base64EncodedString
{
size_t outputLength;
char *outputBuffer =
NewBase64Encode([self bytes], [self length], true, &outputLength);
NSString *result =
[[[NSString alloc]
initWithBytes:outputBuffer
length:outputLength
encoding:NSASCIIStringEncoding]
autorelease];
free(outputBuffer);
return result;
}
+ (NSData *)doCipher:(NSData *)dataIn
key:(NSData *)symmetricKey
context:(CCOperation)encryptOrDecrypt
error:(NSError **)error
{
CCCryptorStatus ccStatus = kCCSuccess;
size_t cryptBytes = 0;
NSMutableData *dataOut = [NSMutableData dataWithLength:dataIn.length + kCCBlockSizeAES128];
ccStatus = CCCrypt( encryptOrDecrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
symmetricKey.bytes,
kCCKeySizeAES128,
nil,
dataIn.bytes, dataIn.length,
dataOut.mutableBytes, dataOut.length,
&cryptBytes);
if (ccStatus == kCCSuccess) {
dataOut.length = cryptBytes;
}
else {
if (error) {
*error = [NSError errorWithDomain:@"kEncryptionError" code:ccStatus userInfo:nil];
}
dataOut = nil;
}
return dataOut;
}