DES跨(C# Android IOS)三个平台通用的加解密方法

#region   跨平台加解密(c# 安卓 IOS)

//  public static string sKey = "12345678";

//  /// <summary>

//  /// 解密

//  /// </summary>

//  /// <param name="pToDecrypt">要解密的以Base64</param>

//  /// <param name="sKey">密钥,且必须为8位</param>

//  /// <returns>已解密的字符串</returns>

//  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;

//      }

//  }

//  /// <summary>

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

//  /// </summary>

//  /// <param name="sourceString">待加密的字符串</param>

//  /// <returns>加密后的BASE64编码的字符串</returns>

//  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 --------------------------------------------------------------------------------------------------------------------\

//加密

+(NSString *)decryptWithContent:(NSString *)content

{

char * keyChar =(char*)[@"加密key" UTF8String];

NSString *jm = [NSString stringWithCString:encryptWithKeyAndType([content UTF8String], kCCEncrypt, keyChar) encoding:NSUTF8StringEncoding];

return [NSString stringWithFormat:@"%@%@%@",qstr,jm,hstr];

}

//解密

+(NSData *)encryptWithContent:(NSData *)content

{

NSString *contentStr = [[NSString alloc] initWithData:content encoding:NSUTF8StringEncoding];

if (contentStr == nil || [contentStr isEqualToString:@""]) {

return nil;

}

contentStr= [contentStr substringWithRange:NSMakeRange(4,contentStr.length-8)];

const char * contentChar =[contentStr UTF8String];

char * keyChar =(char*)[@"加密key" UTF8String];

const char *miChar;

miChar = encryptWithKeyAndType(contentChar, kCCDecrypt, keyChar);

if (miChar == nil) {

miChar = "";

}

NSString *zmStr = [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];

if (zmStr == nil) {

zmStr [email protected]"";

}

return [zmStr dataUsingEncoding:NSUTF8StringEncoding];

}

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 = 0; //size_t  是操作符sizeof返回的结果类型

size_t dataOutMoved = 0;

dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);

dataOut = malloc( dataOutAvailable * sizeof(uint8_t));

memset((void *)dataOut, 00, 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];

}

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 = 0; //size_t  是操作符sizeof返回的结果类型

size_t dataOutMoved = 0;

dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);

dataOut = malloc( dataOutAvailable * sizeof(uint8_t));

memset((void *)dataOut, 00, 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];

}

时间: 2024-08-10 07:25:29

DES跨(C# Android IOS)三个平台通用的加解密方法的相关文章

微信公众平台消息体加解密实现

一.消息体加解密 微信公众平台在配置服务器时,提供了3种加解密的模式供开发者选择,即明文模式.兼容模式.安全模式,选择兼容模式和安全模式前,需在开发者中心填写消息加解密密钥EncodingAESKey. 明文模式:维持现有模式,没有适配加解密新特性,消息体明文收发,默认设置为明文模式 兼容模式:公众平台发送消息内容将同时包括明文和密文,消息包长度增加到原来的3倍左右:公众号回复明文或密文均可,不影响现有消息收发:开发者可在此模式下进行调试 安全模式(推荐):公众平台发送消息体的内容只含有密文,公

Android数据库安全解决方案,使用SQLCipher进行加解密

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952409 我们都知道,Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作.数据库存储是我们经常会使用到的一种存储方式,相信大多数朋友对它的使用方法都已经比较熟悉了吧.在Android中,我们既可以使用原生的SQL语句来对数据进行操作,也可以使用Android API提供的CRUD方法来对数据库进行操作,两种方式各有特点,选择使用哪

C#三个平台上的文件选择方法

wpf: Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.DefaultExt = ".txt"; Nullable<bool> result = dlg.ShowDialog(); if (result == true) { // Open document string filename = dlg.FileName; } FileStream aFile =

【Android】安卓中常用的图片加载方法

一.通过相机选图片: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent&qu

Android 获取签名公钥 和 公钥私钥加解密

public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return */ protected static String getSignInfo(Context mContext) { String signcode = ""; try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.getPack

iOS 资源文件的解压缩与加解密

一.目的 资源文件的解压缩最直接的目的当然是减小包体,加解密当然就是让压缩包不能正常解压缩,看上去压缩包就是损坏了的. 一般来说,资源文件或者是很多(图片),或者是很大(视频).这样很是占空间或者上看去很多内容,当然如果你想这样做完全没有问题. 解压缩可以很好的压缩 多资源 和 大资源,让包体变小,即使是同样的一套资源只要压缩前的资源有些许改变,压缩后的文件的md5肯定不同. dd ddd dd dd dd 原文地址:https://www.cnblogs.com/pinweyshg/p/898

三重Des对称加密在Android、Ios 和Java 平台的实现

引言 如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android.ios.java平台的使用方法: DES加密是目前最常用的对称加密方式,性能优于非对称加密(RSA),是手机app请求数据加密的优先选择.   DES简介: DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法, 算法的入口参数有三个:Key.Data.Mode. Key:为7个字节共56位,是DES算法的工作密钥; Data:

C#/IOS/Android通用加密解密方法

原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密不了,或者反之.下面的是三个平台都可以加密解密的方法.加密解密中用到的key="1234578";在调取方法时传值即可. C#代码 #region 跨平台加解密(c#) /// <summary> /// 对字符串进行DES加密 /// </summary> ///

RSA在Android、vc、java下加解密实现互通。

最近公司项目需求要对上传/下载的数据进行AES+RSA的加解密需求,客户有vc的RSA加解密接口,而且说要与他们的系统兼容,也就是说vc下要用他们的模块实现加解密.期间过程有几个坑,原因都是自己的对这些加密的协议/准则/规范不熟,以此文记录备案. 坑1: 首先先是百度java的RSAUtils,网上很多现成的,例如这个:http://www.2cto.com/kf/201408/328112.html,公钥使用X509的解析类,私钥使用PKCS#8的解析类.编写测试程序一切正常... 然后就是调