мне нужно шифровать и дешифровать с PHP строка кода, генерируемого этим методом Ios объясняется здесь https://stackoverflow.com/a/9479657/721253PHP + ИОС шифровать и дешифровать 3des + base64
для шифрования с PHP я использовать этот сценарий
$key = 'f968f8e82961489a8b14b345';
$data = 'odio quando sto studiando e un velociraptor mi lancia addosso banane';
$encrypted = null;
$m = mcrypt_module_open(MCRYPT_3DES, null, MCRYPT_MODE_ECB, null);
$fake_iv = str_repeat(chr(0), mcrypt_enc_get_iv_size($m));
mcrypt_generic_init($m, $key, $fake_iv);
$encrypted = mcrypt_generic($m, $data);
die(base64_encode($encrypted));
и на ИО для decript я использую, что
NSURL *url = [NSURL URLWithString:@"http://oscurodrago.it/tools/crypto.php"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSData *outData = [self TripleDES:data encryptOrDecrypt:kCCDecrypt key:@"f968f8e82961489a8b14b345"];
CCStatus ошибка возврата декодированием -> если (CCStatus == kCCDecodeError) NSLog (@ "DECODE ERROR");
обновление что viewcontroller.m где я проверяю этот сценарий
#import <CommonCrypto/CommonCryptor.h>
#import "GTMBase64.h"
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
- (NSData*)TripleDES:(NSData*)plainData encryptOrDecrypt:(CCOperation)encryptOrDecrypt key:(NSString*)key {
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOrDecrypt == kCCDecrypt)
{
NSData *EncryptData = [GTMBase64 decodeData:plainData];
plainTextBufferSize = [EncryptData length];
vplainText = [EncryptData bytes];
}
else
{
plainTextBufferSize = [plainData length];
vplainText = (const void *)[plainData bytes];
}
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
// uint8_t ivkCCBlockSize3DES;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc(bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
// memset((void *) iv, 0x0, (size_t) sizeof(iv));
// NSString *key = @"123456789";
NSString *initVec = @"init Vec";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec = (const void *) [initVec UTF8String];
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey, //"123456789", //key
kCCKeySize3DES,
vinitVec, //"init Vec", //iv,
vplainText, //"Your Name", //plainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
else if (ccStatus == kCCParamError) NSLog(@"PARAM ERROR");
else if (ccStatus == kCCBufferTooSmall) NSLog(@"BUFFER TOO SMALL");
else if (ccStatus == kCCMemoryFailure) NSLog(@"MEMORY FAILURE");
else if (ccStatus == kCCAlignmentError) NSLog(@"ALIGNMENT");
else if (ccStatus == kCCDecodeError) NSLog(@"DECODE ERROR");
else if (ccStatus == kCCUnimplemented) NSLog(@"UNIMPLEMENTED");
NSData *result;
if (encryptOrDecrypt == kCCDecrypt)
{
result = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
}
else
{
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [GTMBase64 encodeData:myData];
}
return result;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURL *url = [NSURL URLWithString:@"http://www.oscurodrago.it/tools/crypto.php"];
NSData *data = [NSData dataWithContentsOfURL:url];
NSData *outData = [[NSData alloc] initWithData:[self TripleDES:data encryptOrDecrypt:kCCDecrypt key:@"f968f8e82961489a8b14b345"]];
NSLog(@"%@", data);
// NSData *encriptdata = [self TripleDES:data encryptOrDecrypt:kCCEncrypt key:@"f968f8e82961489a8b14b345"];
NSLog(@"%@", [outData length]);
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
@end
Я не очень хорошо знаком с ios, но '[outData length]' return 0 и i tought http://stackoverflow.com/a/9479657/721253 уже расшифровать/зашифровать base64 – oscurodrago
Что вы получили при печати NSLog (@ "% d", [длина данных]); Если это тоже 0, вы не получаете никаких данных с сервера. – rakeshNS
- это штамп NSLog (@ "% @", данные); dosen't кажутся enpity 2012-03-22 18: 06: 38,973 Cryptdata [1012: F803] <39744d56 306b6a38 716d6e4e 44726f44 414a584c 36355777 34517676 6c6d6339 64566c56 42533973 7038306f 63796e69 75797979 425a6d4b 5377472f 7358706e 5a724546 38356f52 4b7a5269 38683639 65737a4c 476d6c65 78563048 524b3337> – oscurodrago