DES加密(支持ARC与MRC)

DES加密(支持ARC与MRC)

源文件:

YXCrypto.h 与 YXCrypto.m

//
//  YXCrypto.h
//  用秘钥给字符串加密或者解密
//
//  Created by YouXian on 14-11-16.
//  Copyright (c) 2014年 YouXian. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YXCrypto : NSObject

/*!
 * 给字符串加密
 */
+ (NSString *)DesEncryptString:(NSString*)src WithKey:(NSString *)key;

/*!
 * 给字符串解密
 */
+ (NSString *)DesDecryptString:(NSString*)src WithKey:(NSString *)key;

@end
//
//  YXCrypto.m
//  用秘钥给字符串加密或者解密
//
//  Created by YouXian on 14-11-16.
//  Copyright (c) 2014年 YouXian. All rights reserved.
//

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

#if __has_feature(objc_arc)
// ARC
#define Auto_Release(obj)
#define Safe_Release(obj)
#else
// 非ARC
#define Auto_Release(obj) [obj autorelease]
#define Safe_Release(obj) [obj release]; obj = nil
#endif

static YXCrypto *shareInstance = nil;

@implementation YXCrypto

/*!
 * 给字符串加密
 */
+ (NSString *)DesEncryptString:(NSString*)src WithKey:(NSString *)key {
    NSString* strRet = @"";

    if (shareInstance == nil)
    {
        shareInstance = [[YXCrypto alloc] init];
    }

    // encrypt source content
    NSData* bytes = [src dataUsingEncoding:NSUTF8StringEncoding];
    NSData* data = [shareInstance DesCryptWithOperation:kCCEncrypt
                                                  bytes:bytes
                                                    key:key];

    // format bytes to visible string
    char* pBuff = (char*)[data bytes];
    for (int i=0; i<data.length; i++) {
        strRet = [strRet stringByAppendingFormat:@"%02X", pBuff[i]& 0xFF];
    }
    return strRet;
}

/*!
 * 给字符串解密
 */
+ (NSString *)DesDecryptString:(NSString*)src WithKey:(NSString *)key
{
    if (shareInstance == nil)
    {
        shareInstance = [[YXCrypto alloc] init];
    }

    static unsigned char _map_ch2hex[] =
    {
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
        0, 0, 0, 0, 0, 0, 0,    // :, ;, <, =, >, ?, @,
        0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
    };

    // decode source content to bytes
    unsigned char* bytes = (unsigned char*)malloc((src.length+1)*sizeof(unsigned char));
    [[src uppercaseString] getCString:(char*)bytes maxLength:src.length+1 encoding:NSUTF8StringEncoding];
    unsigned char *p1 = bytes, *p2 = bytes;
    unsigned long n = src.length/2;
    for (int i=0; i<n; i++) {
        *p1 = _map_ch2hex[*p2-'0'] * 0x10 + _map_ch2hex[*(p2+1)-'0'];
        p1++;
        p2+=2;
    }
    NSData* data = [NSData dataWithBytes:bytes
                                  length:n];

    // decrypt source bytes
    NSData* dataOut = [shareInstance DesCryptWithOperation:kCCDecrypt
                                                     bytes:data
                                                       key:key];
    free(bytes);

    NSString* strRet = [[NSString alloc] initWithData:dataOut
                                             encoding:NSUTF8StringEncoding];
    Auto_Release(strRet);

    return strRet;
}

- (NSData *)DesCryptWithOperation:(CCOperation)operation bytes:(NSData*)bytes key:(NSString *)key {

    NSUInteger dataLength = [bytes length];

    size_t bufferSize = ([bytes length] + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    unsigned char *buffer = (unsigned char *)malloc(bufferSize*sizeof(unsigned char));
    memset((void*)buffer, 0, bufferSize);

    size_t numBytesCrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(operation,
                                          kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding | kCCOptionECBMode,
                                          (void const*)[key UTF8String],
                                          kCCKeySizeDES,
                                          NULL,
                                          [bytes bytes], dataLength,
                                          (void*)buffer, bufferSize,
                                          &numBytesCrypted);
    NSData* dataRet = nil;
    if (cryptStatus == kCCSuccess) {
        dataRet = [[NSData alloc] initWithBytes:buffer length:numBytesCrypted];
        Auto_Release(dataRet);
    }
    free(buffer);
    return dataRet;
}

@end

此类是用类方法,使用非常便利:

时间: 2024-08-21 01:36:24

DES加密(支持ARC与MRC)的相关文章

PHP、Java des加密解密实例

  这篇文章主要介绍了PHP.Java des加密解密实例,des加密是对称加密中在互联网应用的比较多的一种加密方式,本文分别给出了PHP和JAVA版本的实现代码,需要的朋友可以参考下 des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 下面是加密解密的实例 代码如下: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_

Android数据加密之Des加密_Android

前言:  有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下.  其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密

PHP、Java des加密解密实例_php实例

des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 下面是加密解密的实例 复制代码 代码如下: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  $key = "This is a very secre

php-关于DES加密 求帮助!

问题描述 关于DES加密 求帮助! 对接方des加密 是用.net 写的 我用的是php 就大侠把.net的加密程序帮我 转换成 php的 下面是 .NET 的加密程序: public class DESEncryptDecrypt { private string Key; private string IV; private DESCryptoServiceProvider IDes; private byte[] GetKey; private byte[] GetIV; public D

Android数据加密之Des加密详解_Android

Android DES加密的相关实现,简单的实现了一下,今天来总结一下: DES加密介绍:DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力, 24小时内即可被破解.  DES加密使用方式:  1.)DesUtil常量类介绍  private final static String HEX = "0123456789ABCDEF&q

Node.js DES加密的简单实现_node.js

常见的加密算法基本分为这几类,1 :线性散列算法.2:对称性加密算法.3.非对称性加密算法 (记记记) 线性散列算法(签名算法):MD5,SHA1,HMAC 比如MD5:即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致. 特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别. 4.强抗碰撞:已知原数据

Android数据加密之Des加密

前言: 有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法 DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出

Android数据加密之Des加密详解

Android DES加密的相关实现,简单的实现了一下,今天来总结一下: DES加密介绍: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力, 24小时内即可被破解. DES加密使用方式: 1.)DesUtil常量类介绍 private final static String HEX = "0123456789ABCDEF&quo

银联-c++ des加密出现的问题

问题描述 c++ des加密出现的问题 `这是DESCode.h的代码 #include #include #include #ifndef DESCODE #define DESCODE #define DES_ENCODE 0 #define DES_DECODE 1 class DESCODE { private: char Key[16][48]; char PassWord[8]; int InitKey(); int IPChange(char *Source,char *L,cha