.net 安卓IOS跨平台des加解密双向的(可以互相加解密)

时间:2023-03-09 08:28:15
.net 安卓IOS跨平台des加解密双向的(可以互相加解密)
 #region   跨平台加解密(c# 安卓 IOS)

       //  public static string sKey = "12345678";

       //  /// 

       //  /// 解密

       //  /// 

       //  /// 要解密的以Base64

       //  /// 密钥,且必须为8位

       //  /// 已解密的字符串

       //  public static string DesDecrypt(string pToDecrypt)

       //  {

       //      //转义特殊字符

       //      pToDecrypt = pToDecrypt.Replace("-", "+");

       //      pToDecrypt = pToDecrypt.Replace("_", "/");

       //      pToDecrypt = pToDecrypt.Replace("~", "=");

       //      byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);

       //      using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())

       //      {

       //          des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

       //          des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

       //          System.IO.MemoryStream ms = new System.IO.MemoryStream();

       //          using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))

       //          {

       //              cs.Write(inputByteArray, 0, inputByteArray.Length);

       //              cs.FlushFinalBlock();

       //              cs.Close();

       //          }

       //          string str = Encoding.UTF8.GetString(ms.ToArray());

       //          ms.Close();

       //          return str;

       //      }

       //  }

       //  /// 

       //  /// 对字符串进行DES加密

       //  /// 

       //  /// 待加密的字符串

       //  /// 加密后的BASE64编码的字符串

       //  public string Encrypt(string sourceString)

       //{

       //   byte[] btKey = Encoding.UTF8.GetBytes(sKey);

       //   byte[] btIV = Encoding.UTF8.GetBytes(sKey);

       //    DESCryptoServiceProvider des = new DESCryptoServiceProvider();

       //    using (MemoryStream ms = new MemoryStream())

       //    {

       //        byte[] inData = Encoding.UTF8.GetBytes(sourceString);

       //        try

       //        {

       //            using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))

       //            {

       //                cs.Write(inData, 0, inData.Length);

       //                cs.FlushFinalBlock();

       //            }

       //            return Convert.ToBase64String(ms.ToArray());

       //        }

       //        catch

       //        {

       //            throw;

       //        }

       //    }

       //}

         #endregion  

 安卓---------------------------------------------------------------------------

     //    // 加密

     //public static String DecryptDoNet(String message, String key)

     //        throws Exception {

     //    byte[] bytesrc = Base64.decode(message.getBytes(), Base64.DEFAULT);

     //    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

     //    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));

     //    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

     //    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

     //    IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));

     //    cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);

     //    byte[] retByte = cipher.doFinal(bytesrc);

     //    return new String(retByte);

     //}

     //// 解密

     //public static String EncryptAsDoNet(String message, String key)

     //        throws Exception {

     //    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

     //    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));

     //    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

     //    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

     //    IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));

     //    cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);

     //    byte[] encryptbyte = cipher.doFinal(message.getBytes());

     //    return new String(Base64.encode(encryptbyte, Base64.DEFAULT));

     //}

 Ios --------------------------------------------------------------------------------------------------------------------\

 static const char* encryptWithKeyAndType(const char *text,CCOperation encryptOperation,char *key)
{
NSString *textString=[[NSString alloc]initWithCString:text encoding:NSUTF8StringEncoding];
// NSLog(@"[[item.url description] UTF8String=%@",textString);
const void *dataIn;
size_t dataInLength; if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码
{
//解码 base64
NSData *decryptData = [GTMBase64 decodeData:[textString dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode
dataInLength = [decryptData length];
dataIn = [decryptData bytes];
}
else //encrypt
{
NSData* encryptData = [textString dataUsingEncoding:NSUTF8StringEncoding];
dataInLength = [encryptData length];
dataIn = (const void *)[encryptData bytes];
} CCCryptorStatus ccStatus;
uint8_t *dataOut = NULL; //可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)
size_t dataOutAvailable = ; //size_t 是操作符sizeof返回的结果类型
size_t dataOutMoved = ; dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - );
dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
memset((void *)dataOut, , dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0 //NSString *initIv = @"12345678";
const void *vkey = key;
const void *iv = (const void *) key; //[initIv UTF8String]; //CCCrypt函数 加密/解密
ccStatus = CCCrypt(encryptOperation,// 加密/解密
kCCAlgorithmDES,// 加密根据哪个标准(des,3des,aes。。。。)
kCCOptionPKCS7Padding,// 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密)
vkey, //密钥 加密和解密的密钥必须一致
kCCKeySizeDES,// DES 密钥的大小(kCCKeySizeDES=8)
iv, // 可选的初始矢量
dataIn, // 数据的存储单元
dataInLength,// 数据的大小
(void *)dataOut,// 用于返回数据
dataOutAvailable,
&dataOutMoved); NSString *result = nil; if (encryptOperation == kCCDecrypt)//encryptOperation==1 解码
{
//得到解密出来的data数据,改变为utf-8的字符串
result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];
}
else //encryptOperation==0 (加密过程中,把加好密的数据转成base64的)
{
//编码 base64
NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];
result = [GTMBase64 stringByEncodingData:data];
} return [result UTF8String]; }
+(NSString*)encryptWithContent:(NSString*)content type:(CCOperation)type key:(NSString*)aKey
{
const char * contentChar =[content UTF8String];
char * keyChar =(char*)[aKey UTF8String];
const char *miChar;
miChar = encryptWithKeyAndType(contentChar, type, keyChar);
return [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];
}