Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AES256使用php rijndael_256 ECB_模式在目标C中加密到马赫数_Php_Ios_Encryption_Aes - Fatal编程技术网

AES256使用php rijndael_256 ECB_模式在目标C中加密到马赫数

AES256使用php rijndael_256 ECB_模式在目标C中加密到马赫数,php,ios,encryption,aes,Php,Ios,Encryption,Aes,我试图在objective C中对AES256中的json进行加密,以发送到一台服务器,并使用以下行对其进行php解密: MCRYPT_DECRYPT(MCRYPT_RIJNDAEL_256,$key,base64_decode($ha),MCRYPT_MODE_ECB,NULL)) 我花了好几天的时间进行搜索和测试,但还没有得到结果。我使用的代码是: - (NSString *)AES256EncryptData:(NSData *) datos { //NSData * datos

我试图在objective C中对AES256中的json进行加密,以发送到一台服务器,并使用以下行对其进行php解密:

MCRYPT_DECRYPT(MCRYPT_RIJNDAEL_256,$key,base64_decode($ha),MCRYPT_MODE_ECB,NULL))

我花了好几天的时间进行搜索和测试,但还没有得到结果。我使用的代码是:

- (NSString *)AES256EncryptData:(NSData *) datos {

    //NSData * datos = [json dataUsingEncoding:NSUTF8StringEncoding];

    UIApplication *aplicacion = [UIApplication sharedApplication];
    AppDelegate *delegate = (AppDelegate *) aplicacion.delegate;

    char keyPtr[kCCKeySizeAES256+1];
    bzero(keyPtr, sizeof(keyPtr));
    [delegate.appKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding ];

    NSUInteger dataLength = [datos length];
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);


    size_t numBytesEncrypted;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionECBMode + kCCOptionPKCS7Padding,
                                          keyPtr,
                                          kCCKeySizeAES256,
                                          NULL,
                                          [datos bytes],
                                          [datos length],
                                          buffer,
                                          bufferSize,
                                          &numBytesEncrypted);


    if (cryptStatus == kCCSuccess) {
        NSData *returnData  = [[NSData alloc] initWithBytes:buffer length:numBytesEncrypted];
        return [returnData base64EncodedStringWithOptions:0];
    }

    free(buffer);
    return nil;
}

考虑到您使用的加密算法,您可以永远尝试。您当前使用的是
MCRYPT_RIJNDAEL_256
,它是具有256个块大小的RIJNDAEL分组密码。您应该使用
MCRYPT_RIJNDAEL_128
(也称为AES),然后执行以下操作

您确实应该提供正确的密钥字节数,对于AES,密钥字节数应该是16、24或32字节。显然,密钥字节必须与您在C#代码中使用的字节相匹配



如果无法更改服务器代码,则应为IOS生成/编译mcrypt,并为该特定API实现相同的函数。至少它是兼容的。不幸的是,您似乎不得不这样做。

是的,密钥长度为32字节。我更改了密钥类型,但结果是一样的。有没有设置填充物的想法?我测试过的所有东西都是错误的,结果是空的。我发现我可以用PHP用Rijndael_128而不是Rijndael_256解密结果。问题是我无法更改服务器配置更改了答案,请给服务器开发人员一个好机会,他们的代码不安全,也没有使用任何标准的加密技术。这方面有什么进展吗?我知道这或多或少是一个“否定”的答案,但我恐怕这是我无法改变的。