在cocoa看到的加密代码,介绍一下。
aes加密的,1M的数据,0.1秒以内,速度还可以接受。
@interface NSData (AESAdditions)
- (NSData*)AES256EncryptWithKey:(NSString*)key;
- (NSData*)AES256DecryptWithKey:(NSString*)key;
@end
#import <CommonCrypto/CommonCryptor.h>
@implementation NSData (AESAdditions)
- (NSData*)AES256EncryptWithKey:(NSString*)key {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void* buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);
if (cryptStatus == kCCSuccess)
{
//the returned NSData takes ownership of the buffer and will free it on deallocation
return [NSMutableData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer); //free the buffer;
return nil;
}
- (NSData*)AES256DecryptWithKey:(NSString*)key {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise
char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void* buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesDecrypted);
if (cryptStatus == kCCSuccess)
{
//the returned NSData takes ownership of the buffer and will free it on deallocation
return [NSMutableData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer); //free the buffer;
return nil;
}
@end
分享到:
相关推荐
在Objective-C中实现AES加密,我们可以利用CommonCrypto库,这是一个C语言接口的加密库,被Apple的Foundation框架封装为NSCryptograph服务。以下是一个简单的AES ECB模式加密的示例: ```objc #import - (NSData ...
在本项目中,“DES java objective-c 通用加密”意指提供了一套跨平台的解决方案,允许Java和Objective-C开发者使用相同的加密方法进行数据的安全传输和存储。 1. **DES算法原理**: - DES是一种分组密码,它将...
Objective-C的RSA加密技术是iOS和Mac开发中用于数据安全的一种常见方法。RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年发明,因其发明者的名字首字母而得名。在Objective-C中,RSA...
在iOS中,Objective-C提供了Security框架来处理加密任务,包括RSA操作。我们需要导入`Security/Security.h`头文件,并使用`SecKey`接口来操作密钥。 1. **生成RSA密钥对**: - 使用`SecKeyGeneratePair`函数生成...
XXTea加密算法是一种在Objective-C开发中常用的轻量级数据加密技术,它以其高效、简单的特点被广泛应用于移动应用和软件开发。本资源提供的是一个Objective-C版本的XXTea封装器,方便开发者在iOS和Mac OS X平台中...
该库旨在作为以Objective-C方式实施RSA / AES / SHA加密算法的实验。 那里有很多加密库,但我没有找到一个具有纯 Objective-C(或面向对象)API 的库。 这个实现基于BigInteger的OpenJava实现,现在加密非常好用,...
此毕业论文设计为在虚拟机VMware下,MAC平台的开发平台XCode下基于OBjective-C语言的数据加密系统设计与实现,此加密系统为AES加密体系。 上传文件工程需在MAC平台下开发软件Xcode才能打开,打开里面有界面及程序...
在给定的"EncryptionTools(Objective-C)"项目中,开发者提供了一个简单易用的库,专门针对Objective-C的对称加密操作进行了封装,特别是对于DES(Data Encryption Standard)和AES(Advanced Encryption Standard...
在Objective-C中,AES加密通常使用CommonCrypto库来实现。这个库提供了各种加密算法,包括AES。开发者可以使用`CCCrypt`函数进行加密和解密操作,需要设置密钥、初始化向量(IV)以及操作模式(如ECB、CBC等)。 在...
以下是使用Objective-C进行AES加密的基本步骤: 1. 导入库:在你的.m文件顶部添加`#import <CommonCrypto/CommonCryptor.h>`。 2. 选择模式:AES有多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block ...
在这个项目中,开发者wyxlh提供了Objective-C实现的AES加密和解密功能,便于iOS开发者集成到自己的应用程序中。 AES加密是一种块密码,它基于替换和置换操作,使用相同的密钥进行加密和解密。AES有三个主要参数:...
Objective-C 的 AES 加密 将此代码用于iOS以及Android和Java 后端,您可以使用 AES 准确地加密和解密。 用 C 风格编码只是为了安全。 加密: // For String NSString * aesEncryptString(NSString *content, ...
react-native-aes-kit AES-CBC-PKCS5填充安装npm i --S react-native-aes-kitreact-native link react-native-aes-kit方法加密名称类型笔记sourceText 细绳明文密钥细绳密钥,最大16个字节iv 细绳初始化向量,最大16...
`AESEncryption.h` 和 `AESEncryption.m` 文件很可能是实现AES加密功能的Objective-C类。在这个类中,通常会有以下方法: 1. **初始化方法**:用于设置加密或解密所需的密钥,密钥长度通常有128、192和256位三种...
- iOS子目录:包含iOS工程,展示如何在Swift或Objective-C中实现AES加密。 - 共享资源:可能包括密钥生成、密文转换等跨平台的实用函数。 6. **注意事项**: - 安全存储密钥:不要将密钥硬编码在应用中,避免被...
AES加密有多种算法模式,下面提供两套模式的可用源码: 一、CBC(Cipher Block Chaining,加密块链)模式 二、ECB(Electronic Code Book,电子密码本)模式 其中CBC模式下,有.NET的源码。而ECB模式的,大家在网上找...
React本机AES 用于本机的AES加密/解密安装npm install --save react-native-aes-crypto 或者yarn add react-native-aes-crypto安装(iOS)使用CocoaPods(React Native 0.60及更高版本) cd iospod install使用React...
在标题提到的"java和object C都可以用的AES加密算法"中,我们关注的是一个跨平台的加密解决方案,它允许开发者在Java和Objective-C这两种不同的编程语言中实现相同的安全标准。AES(Advanced Encryption Standard)...
`RSACryptor`是Objective-C中对RSA加密算法的封装,它简化了加密和解密过程,为开发者提供了便捷的接口。 1. **生成秘钥对** RSA算法的核心是公钥和私钥的生成。`RSACryptor`能够帮助开发者创建一对密钥,公钥用于...