#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];
}

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

  1. 安卓ios和angularjs相互调用解决首次调用ios传递标题失败的问题

    1.angular 调用客户端方法放在 try catch中 try { js_invoke.showShareDialog(angular.toJson(obj));  // 在这里放客户端的方法即 ...

  2. 点击复制文字到剪贴板兼容性安卓ios

    一般那种活动H5分享可能会用到点击复制文字到剪贴板,很简单的功能 于是搜了一搜:js复制文字到剪贴板,可用结果大致分为两类: 一类是js原生方法,这种方法兼容性不好,不兼容ios: https://d ...

  3. 【IOS学习基础】weak和strong、懒加载、循环引用

    一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...

  4. 安卓ios各版本及分辨率占比

    Google Play 安装统计数据 只有安卓的 https://developer.android.com/about/dashboards/index.html?hl=zh-cn 腾讯移动分析 安 ...

  5. DES加密 java与.net可以相互加密解密两种方法

    DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...

  6. 史上最简单JS复制功能,兼容安卓ios!

    1.JS复制原理: 被复制内容的元素不能被其他元素遮盖,否则无效.  (设置opacity透明为0,不可以设置display:none); 2.常规的复制方法 function copyUrl2() ...

  7. iOS圆形图片裁剪,以及原型图片外面加一个圆环

    废话不多说,直接上代码 #import "ViewController.h" @interface ViewController () @property (nonatomic,s ...

  8. iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype

    一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行 ...

  9. Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)

    假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=H ...

随机推荐

  1. 使用CPU探查器优化XAML程序

    如果您正在开发一个使用 XAML (是否是 c + +. C# 或 VB) 的 Windows 商店应用程序,还有一个好的机会来提高应用程序的性能.为了帮助完成这一点,我们所有在售的能够应用开发 Wi ...

  2. HW3.20

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  3. Fibonacci数列小程序

    Fibonacci数列小程序 问题分析:Fibonacci数列特征是前两项数均为1,从第三项起,前两项的和为第三项的数的数值用公式归纳起来为:f1=f2=1.f1=f1+f2.f2=f1+f2. 程序 ...

  4. 使用 AppFuse 的七个理由

    mvn -e  archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfus ...

  5. poj1149--PIGS(最大流)

    题意: 有m个猪圈 每个猪圈有不同数量的猪 [0, 1000]有n个顾客 每个顾客需要Bi头猪 有Ai个钥匙 能打开Ai个不同的猪圈顾客按顺序来买猪 只能买他有钥匙的猪 买完之后 这几个猪圈的猪可以相 ...

  6. mongodb基础系列——数据库查询数据返回前台JSP(一)

    经过一段时间停顿,终于提笔来重新整理mongodb基础系列博客了. 同时也很抱歉,由于各种原因,没有及时整理出,今天做了一个demo,来演示,mongodb数据库查询的数据在JSP显示问题. 做了一个 ...

  7. codis集群和redis cluster的优劣对比

    1.codis架构如下: (1)Codis是一整套缓存解决方案,包含高可用.数据分片.监控.动态扩态 etc..走的是 Apps->代理->redis cluster,一定规模后基本都采用 ...

  8. ubuntu14.04中安装QuartusII9.1步骤

    家里的计算机安装了WIN10,出于够用且安装文件小,想安装QuartusII9.1,按M$风格,驱动绝对是安不上的.正好是双系统ubuntu14.04 64位.安装过程不太顺利,记录下来,当作已经不灵 ...

  9. iOS 使用CLGeocoder获取地理位置

    placemark(MKPlacemark类的对象)其实是geocoder(MKReverseGeocoder类的对象)的一个属性.从geocoder里面取placemark这个和直接取placema ...

  10. linux系统磁盘分区之parted

    对于linux的分区通常可以使用fdisk命令工具和parted工具 对于分区表通常有MBR分区表和GPT分区表 对于磁盘大小小于2T的磁盘,我们可以使用fdisk和parted命令工具进行分区 对于 ...