c# 跟IOS DES 加密问题 一、ios 加密代码 +(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key { NSData *data = [clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding| kCCOptionECBMode, [key UTF8String], kCCKeySizeDES, nil, [data bytes], [data length], buffer, 1024, &numBytesEncrypted); NSString* plainText = nil; if (cryptStatus == kCCSuccess) { NSData *dataTemp = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted]; plainText = [GTMBase64 stringByEncodingData:dataTemp]; }else{ NSLog(@"DES加密失败"); } return plainText; }
二、c#加密代码 public string EncryptData(string data) { byte[] keyBytes = Convert.FromBase64String(Key1); byte[] keyIV = Convert.FromBase64String(Key2); byte[] inputByteArray = Encoding.UTF8.GetBytes(data); DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream(); CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Convert.ToBase64String(mStream.ToArray());
} 再附上安卓的代码 public String EncryptData(String Data) throws Exception { byte[] keyBytes = new BASE64Decoder().decodeBuffer(Key1);//ASCIIEncoding.ASCII.GetBytes(key); byte[] keyIV = new BASE64Decoder().decodeBuffer(Key2); //将12位密钥转为8位 IvParameterSpec zeroIv = new IvParameterSpec(keyIV); //获得秘钥 SecretKeySpec key = new SecretKeySpec(keyBytes, "DES"); //实例化加密类Cipher 加密方式/工作模式/填充 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv); byte[] encryptedData = cipher.doFinal(Data.getBytes("UTF-8")); String encode = new String(Base64.encode(encryptedData, Base64.DEFAULT),"UTF-8"); return encode; }
NSString *ciphertext = nil; NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; NSUInteger dataLength = [textData length]; unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesEncrypted = 0; NSData* key1Data = [key1 dataUsingEncoding:NSUTF8StringEncoding]; NSString* key1Base64 = [key1Data base64EncodedStringWithOptions:0]; NSData* key2Data = [key2 dataUsingEncoding:NSUTF8StringEncoding]; NSString* key2Base64 = [key2Data base64EncodedStringWithOptions:0]; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,kCCOptionPKCS7Padding|kCCOptionECBMode,(__bridge const void *)(key1Base64),kCCKeySizeDES,(__bridge const void *)(key2Base64),[textData bytes], dataLength,buffer, 1024,&numBytesEncrypted); if (cryptStatus == kCCSuccess) { NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted]; ciphertext = [GTMBase64 stringByEncodingData:data]; }base64编码了以后还是不对啊
|