我尝试在 iPhone 上使用 AES128(CBC 模式)进行加密,并使用 BASE64 发送到 Windwos Server 上的 ASPX(GET 参数),并在 Windwos Server(C# .NET)上进行解密
我在 iPhone 应用程序和由 openssl 命令制作的 ASPX 上有相同的 KEY 和 IV。
问题是无法在 ASPX 上解密。
这是我的 iOS 源
- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv
{
char keyPtr[kCCKeySizeAES128 + 1];
memset(keyPtr, 0, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 + 1];
memset(ivPtr, 0, sizeof(ivPtr));
[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesCrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(operation,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[self bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
}
free(buffer);
return nil;
}
并像这样使用..
NSString* keyStr = @"898698E7E5E432534B55FC1B18A*****";
NSString* ivStr = @"FE3E758444C0F2B7EAE8F5771E*****";
NSString *email_str = [NSString stringWithCString:(char *) [email.text UTF8String] encoding:NSUTF8StringEncoding];
NSData *emailData = [email_str dataUsingEncoding:NSUTF8StringEncoding];
NSString *pass_str = [NSString stringWithCString:(char *) [pass.text UTF8String] encoding:NSUTF8StringEncoding];
NSData *passData = [pass_str dataUsingEncoding:NSUTF8StringEncoding];
NSData *enEmailData = [emailData AES128EncryptWithKey:keyStr iv:ivStr];
NSData *enPassData = [passData AES128EncryptWithKey:keyStr iv:ivStr];
NSLog(@"Email -> %@ : %@", email.text, [enEmailData base64EncodedString]);
NSLog(@"Pass -> %@ : %@", pass.text, [enPassData base64EncodedString]);
我只想知道 iOS 加密与 C# 加密有什么不同。
请给我一些有关此问题的信息。
谢谢!