2014-10-06 98 views
1

我试图在客观C到加密的AES256一个JSON发送到一台服务器和PHP中使用下面的行解密马赫:AES256加密用PHP rijndael_256 ECB_MODE

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; 
} 
+0

是的,密钥长度为32个字节。我改变了键的类型,但结果是一样的。任何想法设置填充?我测试过的所有内容都是错误的,结果为NULL – 2014-10-06 17:15:10

+0

我发现我可以使用Rijndael_128而不是Rijndael_256解密PHP中的结果。 – 2014-10-07 07:22:43

回答

0

根据您使用的加密算法,您可以尝试永远。您目前正在使用MCRYPT_RIJNDAEL_256,这是Rijndael分组密码,256 块大小。您应该使用MCRYPT_RIJNDAEL_128(也称为AES),然后执行PKCS#7 unpadding yourself

您的确应该提供恰好数量的关键字节,对于AES应该是16,24或32个字节。关键字节显然必须与您在C#代码中使用的字节匹配。


如果你不能更改服务器代码,你应该编译/编译mcrypt for IOS并为该特定API实现相同的功能。至少它会兼容。不幸的是,你似乎需要do the porting yourself

+0

问题是我无法更改服务器配置 – 2014-10-06 17:29:21

+0

更改了答案,请给服务器开发人员一个好的帮助,他们的代码不安全,并且不使用任何标准密码术。 – 2014-10-06 19:21:26

+0

这方面的进展如何?我知道这或多或少是一个“消极”的答案,但恐怕那不是我能改变的。 – 2014-10-08 19:01:37