Ios Asi HTTP请求失败

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

我正在使用AES加密算法(ECB)和ASI http库,但由于401未经授权,我的请求已失败。 我在下面附上了我的代码

加密算法(AES 128加密)

解密算法(AES 128解密)

基本64算法

- (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;
}