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=; 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,
, , , , , , , // :, ;, <, =, >, ?, @,
0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
}; // decode source content to bytes
unsigned char* bytes = (unsigned char*)malloc((src.length+)*sizeof(unsigned char));
[[src uppercaseString] getCString:(char*)bytes maxLength:src.length+ encoding:NSUTF8StringEncoding];
unsigned char *p1 = bytes, *p2 = bytes;
unsigned long n = src.length/;
for (int i=; i<n; i++) {
*p1 = _map_ch2hex[*p2-''] * 0x10 + _map_ch2hex[*(p2+)-''];
p1++;
p2+=;
}
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 - );
unsigned char *buffer = (unsigned char *)malloc(bufferSize*sizeof(unsigned char));
memset((void*)buffer, , bufferSize); size_t numBytesCrypted = ;
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

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

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

  1. IOS、java支持DES加密

    转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...

  2. (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

    我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...

  3. iOS 开发之路(AES/DES加密实现) 三

    最近接触的这个项目由于以前服务器上用的是DES/CBC/PKCS5Padding加密方式,为了让在iOS上的加密结果与服务器端保持一致,我做了很多尝试,现在分享给大家.PS:现在不推荐用DES了,只是 ...

  4. php des 加密解密实例

    des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 $iv_size = mcrypt_ ...

  5. net-snmp源码VS2013编译添加加密支持(OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  6. net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  7. paip.提升安全性----Des加密 java php python的实现总结

    paip.提升安全性----Des加密 java php python的实现总结 ///////////    uapi         private static String decryptBy ...

  8. .NET DES 加密

    using System; using System.Collections.Generic; using System.Text; using System.Security; using Syst ...

  9. DES加密解密与AES加密解密

    随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...

随机推荐

  1. css !important的作用

    css !important的作用是提高指定CSS样式规则的应用优先权. 注意:这个不是万能的,在神奇的IE6下仍然有问题,请参见:http://www.w3chtml.com/css3/rules/ ...

  2. php中时间相差8小时的解决办法

    引用:http://www.111cn.net/phper/31/42398.htm 在php中使用date('Y-m-d H:i:s');得出的结果会相差8个小时,原来是时区的问题 解决办法: 1. ...

  3. SpringBoot入门 (三) 日志配置

    上一篇博文记录了再springboot项目中读取属性文件中配置的属性,本文学习在springboot项目中记录日志. 日志记录在项目中是很常见的一个功能了,对排查问题有很大帮助,也可以做分类分析及统计 ...

  4. 1000. A-B

    1000. A-B -----> http://soj.me/1000 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Descripti ...

  5. [转]微信小程序支付简单小结与梳理

    本文转自:https://www.cnblogs.com/onetwo/p/6667424.html 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物 ...

  6. 关于post跨域请求数据的问题-包括同源策略

    在<system.webServer>配置下面加入 <httpProtocol> <customHeaders> <add name="Access ...

  7. pageParam要求传个JSON对象的方法

    pageParam要求传个JSON对象,使用方式:api.openWin({name: 'page1',url: 'page1.html',pageParam: {x: '1000',y: '2000 ...

  8. JS原型与原型链终极讲解

    function Person () { this.name = 'John'; } var person = new Person(); Person.prototype.say = functio ...

  9. [转]使用C#进行图像处理的几种方法

    最近做监控图像由彩色变灰处理的时候发现图像处理过程中,很慢很慢代码如下: int Height = this.picInfo.Image.Height;                    int ...

  10. 自己写一个java的mvc框架吧(一)

    自己写一个mvc框架吧(一) 目录 自己写一个mvc框架吧(一) 自己写一个mvc框架吧(二) 自己写一个mvc框架吧(三) 自己写一个mvc框架吧(四) 写之前的一些废话 废话 1 (总是要先随便说 ...