AES在Obj-C中的加密和在PHP中的解密

AES在Obj-C中的加密和在PHP中的解密,php,objective-c,encryption,aes,Php,Objective C,Encryption,Aes,我对这方面还不太熟悉。我的PHP echo正在返回垃圾。我想我遗漏了一个编码步骤 我的OBJ-C代码 NSString *key = @"12345678901234561234567890123456"; //main path for account login PHP file NSString *accountURL = [NSString stringWithFormat:configManager.accountURL, username, password];

我对这方面还不太熟悉。我的PHP echo正在返回垃圾。我想我遗漏了一个编码步骤

我的OBJ-C代码

NSString *key = @"12345678901234561234567890123456";

    //main path for account login PHP file
    NSString *accountURL = [NSString stringWithFormat:configManager.accountURL, username, password];

    //convert password to data and encrypt
    NSData *crypt = [[[password stringValue]dataUsingEncoding:NSUTF8StringEncoding]AES256EncryptWithKey:key];

    NSString *variables = [NSString stringWithFormat:@"?username=%@&access=%@&page=%ld",[username stringValue], crypt, [sender tag]];

    // get rid of spaces in encoded URL
    NSString *niceURLString = [variables stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    //tack niceURL on to end of base URL
    NSString *goToURL = [accountURL stringByAppendingString:niceURLString];
    NSLog(@"%@", goToURL);

    [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:goToURL]];
PHP

$upswd=$\u GET['access'];
$key=“1234567890123456”;
$upswd=修剪($upswd,“”)//从url中删除这些括号
$result=mcrypt_decrypt(mcrypt_RIJNDAEL_256,$key,$upswd,'ecb');
//$result=utf8\u解码($result);
回声($结果);

如果要创建新的IV,则需要使用原始IV。它通常与加密文本一起传递,并用分隔符分隔。常用的分隔符是。或者|然后让PHP在分隔符处拆分加密字符串,使用IV作为解密函数,并使用另一部分作为加密数据。

与您的问题没有直接关系,但您在ECB模式下使用AES,这有非常严重的问题。如果iOS端的代码能够使用任何其他模式(希望如此!),那么使用任何其他模式(如CBC)可能会更好。谢谢你的提示。我会查的,我真的很迷茫。这就是我现在拥有的<代码>$key=“123456788901234561234567890123456”$upswd=修剪($upswd,“”)//从url$result=mcrypt_decrypt(mcrypt_RIJNDAEL_256,$key,utf8_decode($upswd),'ecb')中删除这些括号$结果=utf8_解码($result);回声($结果)我只想让它在ECB工作,然后一旦我知道我在做什么,我就会切换。我想知道是不是我的obj-c代码把事情搞砸了。它需要用utf-8解码,对吗?你不需要用utf编码或解码加密的字符串,它可以是十六进制或二进制格式,而不需要字符编码。现在,在向加密例程传递加密数据和从加密例程传递加密数据时,您需要确保所做的任何编码都是反向镜像的。我原以为这会起作用,但它不起作用,
$result=mcrypt_decrypt(mcrypt_RIJNDAEL_256,$key,$upswd,'ecb')我想知道我的obj-c代码中是否缺少一个步骤。看,我正在将其传递到url。。。我应该将NSdata转换为字符串吗?嗯。。我只看到一个大块,但没有明显的分隔符<代码>486053a5%2016d83b3a%204ee09823%20b61b570b
$upswd = $_GET['access'];
    $key = "12345678901234561234567890123456";
$upswd = trim($upswd, "<>"); //remove these brackets from url

$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $upswd, 'ecb');
//$result = utf8_decode($result);
echo ($result);
        mcrypt_create_iv(
            mcrypt_get_iv_size(
                MCRYPT_RIJNDAEL_256,
                MCRYPT_MODE_ECB
            )