没写过Obj-C不过看起来Obj-C这边用的是3DES,.Net对应的类应该是TripleDESCryptoServiceProvider而不是DES

解决方案 »

  1.   

    没试过object-c,试试一样的Key IV 生成的结果是否相同
      

  2.   

    以下为iphone 中的object-c代码
    NSString *plainText=@"a";
        //NSString *key = @"optuyv+nplm";
        //NSString *initVec = @"loaoqiej+nbb";
        NSString *key = @"uwniTq6wza7nU4/cCVxTScpjhlv1Tl5s";
        NSString *initVec = @"ld6Et92CmbQ=";
        CCOperation encryptOrDecrypt=kCCEncrypt;
        //encryptOrDecrypt == kCCDecrypt
        const void *vplainText;
        size_t plainTextBufferSize;
        
        
        
       
            NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
            plainTextBufferSize = [data length];
            vplainText = (const void *)[data 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 = @"123456789012345678901234";
        /*
       
        NSData* data1 = [key dataUsingEncoding:NSUTF8StringEncoding];
        NSString *siw=[[NSString alloc]initWithData:data1 encoding:NSUTF8StringEncoding];
        //NSString *mm=[GTMBase64 stringByEncodingData:data1];
        NSData* data2 = [initVec dataUsingEncoding:NSUTF8StringEncoding];
        //NSString *nn=[GTMBase64 stringByEncodingData:data2];
        
        Byte *mm=(Byte *)[data1 bytes];
        NSData *adata=[[NSData alloc]initWithBytes:mm length:[data1 length]];
        
        
        
        NSString *ns1=[[NSString alloc]initWithData:adata encoding:NSUTF8StringEncoding];
        Byte *nn=(Byte *)[data2 bytes];
        */    const void *mm = (const void *) [key UTF8String];
        const void *nn = (const void *) [initVec UTF8String];
        //uint8_t mm[]={0x2,0x1,0x0,0x1,0x0,0x0,0x0,0x0};
        //uint8_t nn[]={0x2,0x1,0x0,0x1,0x0,0x0,0x0,0x0};
        ccStatus = CCCrypt(encryptOrDecrypt,
                           kCCAlgorithm3DES,
                           kCCOptionPKCS7Padding,
                           mm, //"123456789012345678901234", //key
                           kCCKeySize3DES,
                           nn, //"init Vec", //iv,
                           vplainText, //"Your Name", //plainText,
                           plainTextBufferSize,
                           (void *)bufferPtr,
                           bufferPtrSize,
                           &movedBytes);
        //if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
        /*else if (ccStatus == kCC ParamError) return @"PARAM ERROR";
         else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
         else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
         else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
         else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
         else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED"; */
        
        NSString *result;
        
        
            NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
            result = [GTMBase64 stringByEncodingData:myData];
        self.textView1.text=result;
        NSLog(@"%@",result);// result;改过后的c#代码
    //mCSP = new DESCryptoServiceProvider();
            mCSP = new TripleDESCryptoServiceProvider();
            
            //mCSP.Mode = CipherMode.CBC;
            //mCSP.Padding = PaddingMode.PKCS7;
            ICryptoTransform ct;
            MemoryStream ms;
            CryptoStream cs;
            byte[] byt;
            byt = Encoding.UTF8.GetBytes(Value);
            byte[] msc = Convert.FromBase64String(CKEY);        mCSP.Key = Convert.FromBase64String("uwniTq6wza7nU4/cCVxTScpjhlv1Tl5s");
            mCSP.IV = Convert.FromBase64String("ld6Et92CmbQ=");
            mCSP.Padding = PaddingMode.PKCS7;
            mCSP.Mode = CipherMode.CBC;        ct = mCSP.CreateEncryptor();
          
            ms = new MemoryStream();
            cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();        cs.Close();
            return Convert.ToBase64String(ms.ToArray());求高人指点