2016-09-11 11:01:11 gwh111 阅读数 431
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25315 人正在学习 去看看 邵发

应用场景:

保存一些nsstring不希望别人看到,就简单加密,提取时解密

加密的原理看这里点击打开链接


新建一个DESTool的类,使用方便,不使用

开源库 GTMBase64 转码

ios7之后自己支持了base64的转码,所以不要再引入一个库了

将h和m文件贴到如下

h文件

//
//  DESTool.h
//  testDES
//
//  Created by apple on 16/9/11.
//  Copyright © 2016年 apple. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface DESTool : NSObject

+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;

+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key;

@end

m文件

//
//  DESTool.m
//  testDES
//
//  Created by apple on 16/9/11.
//  Copyright © 2016年 apple. All rights reserved.
//

#import "DESTool.h"
#import <CommonCrypto/CommonCryptor.h>

@implementation DESTool

/*字符串加密
 *参数
 *plainText : 加密明文
 *key        : 密钥 64位
 */
+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
    NSString *ciphertext = nil;
    const char *textBytes = [plainText UTF8String];
    NSUInteger dataLength = [plainText length];
    unsigned char buffer[1024];
    memset(buffer, 0, sizeof(char));
    Byte iv[] = {1,2,3,4,5,6,7,8};
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding|kCCOptionECBMode,
                                          [key UTF8String], kCCKeySizeDES,
                                          iv,
                                          textBytes, dataLength,
                                          buffer, 1024,
                                          &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
        
        ciphertext = [self encodeData:data];
    }
    return ciphertext;
}

//解密
+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key
{
    NSData* cipherData = [self decodeString:cipherText];
    unsigned char buffer[1024];
    memset(buffer, 0, sizeof(char));
    size_t numBytesDecrypted = 0;
    Byte iv[] = {1,2,3,4,5,6,7,8};
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding|kCCOptionECBMode,
                                          [key UTF8String],
                                          kCCKeySizeDES,
                                          iv,
                                          [cipherData bytes],
                                          [cipherData length],
                                          buffer,
                                          1024,
                                          &numBytesDecrypted);
    NSString* plainText = nil;
    if (cryptStatus == kCCSuccess) {
        NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
        plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
    return plainText;
}

+ (NSString *)encodeData:(NSData *)originData{
    
    NSString* encodeResult = [originData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    //    NSString* encodeResult = [originData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    return encodeResult;
}
+ (NSData *)decodeString:(NSString *)encodeResult{
    
    NSData* decodeData = [[NSData alloc] initWithBase64EncodedString:encodeResult options:0];
    //    NSString* decodeStr = [[NSString alloc] initWithData:decodeData encoding:NSASCIIStringEncoding];
    return decodeData;
}

@end


2019-03-19 14:20:12 lpCrazyBoy 阅读数 434
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25315 人正在学习 去看看 邵发

IOS常用加密技术有三种:3DES、SHA1和MD5。其中,对称加密技术有:3DES和SHA1;非对称加密技术有:MD5;

对称加密:加密解密用的是同一个密钥。

非对称加密:生成公有密钥和私有密钥。一个加密,一个解密。

 

本篇介绍的是3DES加密解密技术:

1、创建HeaderFile文件My3DES.h。然后,添加以下代码,引用相关的头文件:

#import <CommonCrypto/CommonCrypto.h>

2、在BuildSetting面板中设置Objective-C Bridging Header的Value值为第1步创建的桥接文件所在的位置。比如:项目名/文件名.h。

3、配置好了之后,下面就开始使用了。

import UIKit

class ViewController: UIViewController {

    private let randomStringArray:[Character] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map({$0});
    
    var key:String!;
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        let data:Data = encrypt(encryptData: "http://www.baidu.com");
        decrypt(inputData: data);
    }

    func randomStringOfLength(_ length:Int) -> String {
        var string = "";
        for _ in(1...length) {
            string.append(randomStringArray[Int(arc4random_uniform(UInt32(randomStringArray.count) - 1))]);
        }
        return string;
    }
    
    //加密
    func encrypt(encryptData:String) -> Data {
        key = randomStringOfLength(kCCKeySize3DES);
        let inputData:Data = encryptData.data(using: String.Encoding.utf8)!;
        
        let keyData:Data = key.data(using: String.Encoding.utf8, allowLossyConversion: false)!;
        let keyBytes = UnsafeMutableRawPointer(mutating: (keyData as NSData).bytes);
        let keyLength = size_t(kCCKeySize3DES);
        
        let dataLength = Int(inputData.count);
        let dataBytes = UnsafeRawPointer((inputData as NSData).bytes);
        let bufferData = NSMutableData(length: Int(dataLength) + kCCKeySize3DES)!;
        let bufferPointer = UnsafeMutableRawPointer(bufferData.mutableBytes);
        let bufferLength = size_t(bufferData.length);
        var bytesDecrypted = Int(0);
        
        let cryptStatus = CCCrypt(
            UInt32(kCCEncrypt),
            UInt32(kCCAlgorithm3DES),
            UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding),
            keyBytes,
            keyLength,
            nil,
            dataBytes,
            dataLength,
            bufferPointer,
            bufferLength,
            &bytesDecrypted
            );
        
        if Int32(cryptStatus) == Int32(kCCSuccess) {
            bufferData.length = bytesDecrypted;
            print("encrypt success");
            
        } else {
            print("加密过程出错\(cryptStatus)");
        }
        return bufferData as Data;
    }
    
    //解密
    func decrypt(inputData:Data) {
        let keyData:Data = key.data(using: String.Encoding.utf8, allowLossyConversion: false)!;
        let keyBytes = UnsafeMutableRawPointer(mutating: (keyData as NSData).bytes);
        let keyLength = size_t(kCCKeySize3DES);
        
        let dataLength = Int(inputData.count);
        let dataBytes = UnsafeRawPointer((inputData as NSData).bytes);
        let bufferData = NSMutableData(length: Int(dataLength) + kCCKeySize3DES)!;
        let bufferPointer = UnsafeMutableRawPointer(bufferData.mutableBytes);
        let bufferLength = size_t(bufferData.length);
        var bytesDecrypted = Int(0);
        
        let cryptStatus = CCCrypt(
            UInt32(kCCDecrypt),
            UInt32(kCCAlgorithm3DES),
            UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding),
            keyBytes,
            keyLength,
            nil,
            dataBytes,
            dataLength,
            bufferPointer,
            bufferLength,
            &bytesDecrypted
        );
        
        if Int32(cryptStatus) == Int32(kCCSuccess) {
            bufferData.length = bytesDecrypted;
            let clearDataAsString = NSString(data: bufferData as Data, encoding: String.Encoding.utf8.rawValue);
            print("解密后的内容:\(clearDataAsString! as String)");
        } else {
            print("解密过程出错\(cryptStatus)");
        }
    }

}

输出结果为:

encrypt success
解密后的内容:http://www.baidu.com

2016-05-04 15:42:32 CaryG 阅读数 2258
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25315 人正在学习 去看看 邵发


之前网络请求使用的加密方式一直都是md5加密。不过最近业务变了,后台要求使用新的加密方式,使用DES3方式进行加密。

下面简述一下在这里遇到的坑,主要讲的是ios端DES3加密。


想要使用DES3加密,必须了解它的算法或者有DES3加密算法的工具类。

下面是github上开源的DES3的工具类:

https://github.com/alanzhangg/DESThree


使用方法就很简单啦。

简单介绍一下:

在你的工程中导入这几个类,如果你使用的是ARC创建工程的话,需要给GTMBase64这个类,添加-fno-objc-arc的属性。

DES3Util这个类就是封装了DES3加密算法的类,参考一下工程中的实现就明白了。


然后,介绍一下Android端的DES3加密,这里是摘抄了别人的一部分代码。

首先是JAVA端的加密工具类,它同样适用于Android端,无需任何修改,即可保证Java与Android端的加解密一致,并且中文不会乱码。

package org.liuyq.des3;

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;

/**
 * 3DES加密工具类
 *
 * @author liufeng
 * @date 2012-10-11
 */
public class Des3 {
    // 密钥
    private final static String secretKey = "liuyunqiang@lx100$#365#$";
    // 向量
    private final static String iv = "01234567";
    // 加解密统一使用的编码方式
    private final static String encoding = "utf-8";
    
    /**
     * 3DES加密
     *
     * @param plainText 普通文本
     * @return
     * @throws Exception
     */
    public static String encode(String plainText) throws Exception {
        Key deskey = null;
        DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
        deskey = keyfactory.generateSecret(spec);
        
        Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
        IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
        byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding));
        return Base64.encode(encryptData);
    }
    
    /**
     * 3DES解密
     *
     * @param encryptText 加密文本
     * @return
     * @throws Exception
     */
    public static String decode(String encryptText) throws Exception {
        Key deskey = null;
        DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
        deskey = keyfactory.generateSecret(spec);
        Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
        IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
        
        byte[] decryptData = cipher.doFinal(Base64.decode(encryptText));
        
        return new String(decryptData, encoding);
    }
}

上面的加密工具类会使用到Base64这个类,该类的源代码如下:

package org.liuyq.des3;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * Base64编码工具类
 *
 * @author liufeng
 * @date 2012-10-11
 */
public class Base64 {
    private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
    
    public static String encode(byte[] data) {
        int start = 0;
        int len = data.length;
        StringBuffer buf = new StringBuffer(data.length * 3 / 2);
        
        int end = len - 3;
        int i = start;
        int n = 0;
        
        while (i <= end) {
            int d = ((((int) data[i]) & 0x0ff) << 16) | ((((int) data[i + 1]) & 0x0ff) << 8) | (((int) data[i + 2]) & 0x0ff);
            
            buf.append(legalChars[(d >> 18) & 63]);
            buf.append(legalChars[(d >> 12) & 63]);
            buf.append(legalChars[(d >> 6) & 63]);
            buf.append(legalChars[d & 63]);
            
            i += 3;
            
            if (n++ >= 14) {
                n = 0;
                buf.append(" ");
            }
        }
        
        if (i == start + len - 2) {
            int d = ((((int) data[i]) & 0x0ff) << 16) | ((((int) data[i + 1]) & 255) << 8);
            
            buf.append(legalChars[(d >> 18) & 63]);
            buf.append(legalChars[(d >> 12) & 63]);
            buf.append(legalChars[(d >> 6) & 63]);
            buf.append("=");
        } else if (i == start + len - 1) {
            int d = (((int) data[i]) & 0x0ff) << 16;
            
            buf.append(legalChars[(d >> 18) & 63]);
            buf.append(legalChars[(d >> 12) & 63]);
            buf.append("==");
        }
        
        return buf.toString();
    }
    
    private static int decode(char c) {
        if (c >= 'A' && c <= 'Z')
            return ((int) c) - 65;
        else if (c >= 'a' && c <= 'z')
            return ((int) c) - 97 + 26;
        else if (c >= '0' && c <= '9')
            return ((int) c) - 48 + 26 + 26;
        else
            switch (c) {
                case '+':
                    return 62;
                case '/':
                    return 63;
                case '=':
                    return 0;
                default:
                    throw new RuntimeException("unexpected code: " + c);
            }
    }
    
    /**
     * Decodes the given Base64 encoded String to a new byte array. The byte array holding the decoded data is returned.
     */
    
    public static byte[] decode(String s) {
        
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            decode(s, bos);
        } catch (IOException e) {
            throw new RuntimeException();
        }
        byte[] decodedBytes = bos.toByteArray();
        try {
            bos.close();
            bos = null;
        } catch (IOException ex) {
            System.err.println("Error while decoding BASE64: " + ex.toString());
        }
        return decodedBytes;
    }
    
    private static void decode(String s, OutputStream os) throws IOException {
        int i = 0;
        
        int len = s.length();
        
        while (true) {
            while (i < len && s.charAt(i) <= ' ')
                i++;
            
            if (i == len)
                break;
            
            int tri = (decode(s.charAt(i)) << 18) + (decode(s.charAt(i + 1)) << 12) + (decode(s.charAt(i + 2)) << 6) + (decode(s.charAt(i + 3)));
            
            os.write((tri >> 16) & 255);
            if (s.charAt(i + 2) == '=')
                break;
            os.write((tri >> 8) & 255);
            if (s.charAt(i + 3) == '=')
                break;
            os.write(tri & 255);
            
            i += 4;
        }
    }
}

2018-12-21 17:39:51 jike_yangyujing 阅读数 51
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25315 人正在学习 去看看 邵发

对称加密解密用同一个密钥, 所以密钥的保密就很重要

介绍

  • DES:数据加密标准
    DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion)
  • 3DES: 是DES向AES过渡的加密算法
    使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形,目前还没有关于攻破3DES的报道
  • AES:高级加密标准
    是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES

ECB & CBC介绍

ECB电子代码本

  • 把每一个数据块独立加密,最后再拼接。解密也是同样的道理。先拆分数据块,独立解密
  • 特点: 每个块都是独立加密的

终端测试命令:
加密
openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin

解析:openssl 库函数、 enc加密 、des-ecb 加密方式方法、 -k 加密key、 616263 abc的16进制、 -nosalt 不加盐、-in msg1.txt 加密哪个文本、 -out msg1.bin 输出bin文件

解密
openssl enc -des-ecb -K 616263 -nosalt -in msg1.bin -out msg1.txt -d
查看之后的二进制文件
xxd msg1.bin

CBC密码块链

  • 加密每一个数据块,都会与上一个数据块之间有联系;密码块链,使用密钥和一个向量对数据执行加密转换。能够保证密文的完整性,如果一个数据改变了,后面数据都会造成破坏!
  • 特点:使用一个秘钥和一个初始化向量(IV)对数据执行加密转换
  • 优点:可以有效的保证密文的完整性

密码学为什么和几何能扯到关系?

因为几何是有规律的,但结果是多变的
现代加密学都和几何有关,因为几何(包含圆形、椭圆、球体)的变量的是规律的,但是结果是多变的。

终端测试命令

加密
openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in a.txt -out msg1.bin
解密
openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.bin -out msg4.txt -d
查看加密之后的二进制文件
xxd msg1.bin

iOS中的函数

CCCrypt:对称加密的核心函数(加密、解密)

  • 参数:
  1. 加密kCCEncrypt、解密kCCDecrypt
  2. 加密算法 AES/DES
    kCCAlgorithmAES 高级加密标准
    kCCAlgorithmDES 数据加密标准
  3. 加密选项:ECB/CBC
  4. 加密的密钥
  5. 密钥长度
  6. iv 初始化向量 DES加密为nil
  7. 加密的长度
  8. 加密的数据长度
  9. 密文的内存地址
  10. 密文缓冲区大小
  11. 加密结果大小

附:iOS对称加密的demogithub链接

2016-09-11 15:48:59 u013068862 阅读数 1673
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25315 人正在学习 去看看 邵发

前天后台给了个C#的DES加密算法需要我研究,并运用到新的项目中去,虽然网上有很多,但质量也参差不齐,并没有完全符合自己的需求的。现将这几天的研究成果附上:

#pragma mark - data转16进制函数
- (NSString *)stringFromByte:(Byte)byteVal
{
    NSMutableString *str = [NSMutableString string];
    
    //取高四位
    Byte byte1 = byteVal>>4;
    //取低四位
    Byte byte2 = byteVal & 0xf;
    //拼接16进制字符串
    [str appendFormat:@"%x",byte1];
    [str appendFormat:@"%x",byte2];
    return str;
}


-(NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key andIv:(NSString *)authIv
{
    const void *dataIn;
    size_t dataInLength;
    if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码
    {
        //解码 16进制转换data
        if (!sText || [sText length] == 0) {
            return nil;
        }
        
        NSMutableData *decryptData = [[NSMutableData alloc] initWithCapacity:8];
        NSRange range;
        if ([sText length] % 2 == 0) {
            range = NSMakeRange(0, 2);
        } else {
            range = NSMakeRange(0, 1);
        }
        for (NSInteger i = range.location; i < [sText length]; i += 2) {
            unsigned int anInt;
            NSString *hexCharStr = [sText substringWithRange:range];
            NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
            
            [scanner scanHexInt:&anInt];
            NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
            [decryptData appendData:entity];
            
            range.location += range.length;
            range.length = 2;
        }
        dataInLength = [decryptData length];
        dataIn = [decryptData bytes];
    }
    else  //encrypt
    {
        NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];
        dataInLength = [encryptData length];
        dataIn = (const void *)[encryptData bytes];
    }
    /*
     DES加密 :用CCCrypt函数加密一下,然后用转换为16进制数,传过去
     DES解密 :把收到的数据根据16进制转data,然后再用CCCrypt函数解密,得到原本的数据
     */
    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, 0x0, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0
    
    const void *vkey = (const void *) [key UTF8String];
    const void *iv = (const void *) [authIv 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];
        NSLog(@"解密 --- %@",result);
    }
    else //encryptOperation==0  (加密过程中,把加好密的数据转成16进制数)
    {
        //编码 转16进制
        NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];
        NSMutableString *str = [NSMutableString string];
        Byte *byte = (Byte *)[data bytes];
        for (int i = 0; i<[data length]; i++) {
            [str appendString:[self stringFromByte:*(byte+i)]];
        }
        NSLog(@"加密 --- %@",str);
        result = str;
       
    }
    
    return result;

}

其中里面需要注意的地方是key的值是独立的,每个公司有自己key的算法。所以这里自己需要自己去做。而Iv这个值,是CCCrypt中必须传进去的,建议最好与key值一致。

没有更多推荐了,返回首页