zoukankan      html  css  js  c++  java
  • iphone 下用mac libSystem 中的CCCrypt 进行des加密

    /*此例子没测试过

    #import <CommonCrypto/CommonCryptor.h>
    
    

    + (NSString *)DESEncryptStr:(NSString *)sTextIn key:(NSString *)sKey
    {
    NSStringEncoding EnC = NSUTF8StringEncoding;

    NSMutableData * dTextIn = [[sTextIn dataUsingEncoding: EnC] mutableCopy];
        NSMutableData * dKey = [[sKey dataUsingEncoding:EnC] mutableCopy];

    [dKey setLength:kCCBlockSizeDES];
    uint8_t *bufferPtr1 = NULL;
    size_t bufferPtrSize1 = 0;
    size_t movedBytes1 = 0;

    Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
    bufferPtrSize1 = ([sTextIn length] + kCCKeySizeDES) & ~(kCCKeySizeDES -1);
    bufferPtr1 = malloc(bufferPtrSize1 * sizeof(uint8_t));
    memset((void *)bufferPtr1, 0x00, bufferPtrSize1);
    CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt, // CCOperation op (kCCEncrypt/kCCDecrypt)
                    kCCAlgorithmDES, // CCAlgorithm alg
                     kCCOptionPKCS7Padding|kCCOptionECBMode, // CCOptions options
                     [dKey bytes], // const void *key
                     [dKey length], // size_t keyLength
                    iv, // const void *iv
                    [dTextIn bytes], // const void *dataIn
                    [dTextIn length], // size_t dataInLength
                    (void *)bufferPtr1, // void *dataOut
                    bufferPtrSize1, // size_t dataOutAvailable
                    &movedBytes1); // size_t *dataOutMoved  
     //if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
        /*else if (ccStatus == kCC ParamError) return @"PARAM ERROR";
        else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
        else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
        else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
        else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
        else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED"; */ 

    NSString * sResult = [[[ NSString alloc] initWithData:[NSData dataWithBytes:bufferPtr1
    length:movedBytes1] encoding:EnC] autorelease];
    free(bufferPtr1);
    return sResult;
    }


    最后转成base64串输出。

    =============下面是c#的========(之前就做iphone的一个和C#通信用到des  后来Mode 和Padding 没一至,导至加出来的不一样。

    C#里的加密方法


    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.IO;

    using System.Security.Cryptography;

    using DesTest;

    namespace DesTest

    {

        class Program

        {

            public static void Main(String[] args)

            {

                string strDes = "I dont konw";

                string strKey = "12345678";

                byte[] IVArrary = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

                Encoding sEncoding = Encoding.GetEncoding("utf-8");

                byte[] keyArray = sEncoding.GetBytes(strKey);

                byte[] inByte = sEncoding.GetBytes(strDes);

                byte[] retByte = DESEncryptWithCBCZeros(inByte, keyArray, IVArrary);

              //string Output = sEncoding.GetString(retByte);

              //Console.Write(Output);

                String strout = Convert.ToBase64String(retByte);

                Console.Write(strout);

            }

            public static byte[] DESEncryptWithCBCZeros(byte[] inBytes, byte[] keyBytes, byte[] ivBytes)

            {

                using (MemoryStream memoryStream = new MemoryStream())

                {

                    DES des = DES.Create();

          //        des.Mode = CipherMode.CBC;

                    des.Mode = CipherMode.ECB;

         //         des.Padding = PaddingMode.Zeros;

                    des.Padding = PaddingMode.PKCS7;

                    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateEncryptor(keyBytes, ivBytes), CryptoStreamMode.Write))

                    {

                        cryptoStream.Write(inBytes, 0, inBytes.Length);

                        cryptoStream.FlushFinalBlock();

                        byte[] bytes = memoryStream.ToArray();

                        cryptoStream.Close();

                        memoryStream.Close();

                        return bytes;

                    

                    }

                }

            }  

           

        };

    }

  • 相关阅读:
    【PS技巧】常用概念和功能操作
    【存储】RAID磁盘阵列选择
    【Python 01】Python一种面向对象、解释型计算机程序设计语言
    【PS技巧】如何校正倾斜的图片
    【阿里巴巴大数据实践笔记】第14章:存储和成本管理
    【阿里巴巴大数据实践笔记】第13章:计算管理
    【阿里巴巴大数据实践笔记】第9章:阿里巴巴数据整合及管理体系
    今晚直播丨抢鲜体验-openGauss入门
    详述一则数据库死锁故障的分析过程
    前端学习笔记(一)HTML入门
  • 原文地址:https://www.cnblogs.com/sanjin/p/2185594.html
Copyright © 2011-2022 走看看