des算法一致性请教。 没写过Obj-C不过看起来Obj-C这边用的是3DES,.Net对应的类应该是TripleDESCryptoServiceProvider而不是DES 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没试过object-c,试试一样的Key IV 生成的结果是否相同 以下为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());求高人指点 dataGridView能不能绑定一个数据滚动到那一行? 怎么把做出来的项目在其他电脑上运行 关于OpenFileDialog和FolderBrowserDialog的问题 求助:关于ExitWindowsEx的使用 关于字体重新设置格式的问题 在asp.net中,如何让客户自定义模板? 怎样得到DataTable中行号? 怎样下载应用程序上的控件? 求控件可以在FORM面板上随意拖动移动位置的源程序 怎样继续创建注册表的子项? 关于HttpWebResponse.GetResponse() 基础连接已经关闭(连接被意外关闭的问题) WPF 禁止程序重复打开的问题
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());求高人指点