`
bengan
  • 浏览: 203691 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

objective-c aes加密

阅读更多
在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加密

    在Objective-C中实现AES加密,我们可以利用CommonCrypto库,这是一个C语言接口的加密库,被Apple的Foundation框架封装为NSCryptograph服务。以下是一个简单的AES ECB模式加密的示例: ```objc #import - (NSData ...

    DES java objective-c 通用加密

    在本项目中,“DES java objective-c 通用加密”意指提供了一套跨平台的解决方案,允许Java和Objective-C开发者使用相同的加密方法进行数据的安全传输和存储。 1. **DES算法原理**: - DES是一种分组密码,它将...

    objective-c的RSA加密.zip

    Objective-C的RSA加密技术是iOS和Mac开发中用于数据安全的一种常见方法。RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年发明,因其发明者的名字首字母而得名。在Objective-C中,RSA...

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现.zip

    在iOS中,Objective-C提供了Security框架来处理加密任务,包括RSA操作。我们需要导入`Security/Security.h`头文件,并使用`SecKey`接口来操作密钥。 1. **生成RSA密钥对**: - 使用`SecKeyGeneratePair`函数生成...

    XXTea 加密算法的 Objective-C 包装器_代码_下载

    XXTea加密算法是一种在Objective-C开发中常用的轻量级数据加密技术,它以其高效、简单的特点被广泛应用于移动应用和软件开发。本资源提供的是一个Objective-C版本的XXTea封装器,方便开发者在iOS和Mac OS X平台中...

    objcencryption:在 Objective-C 中实现的加密库。 AES、SHA、RSA

    该库旨在作为以Objective-C方式实施RSA / AES / SHA加密算法的实验。 那里有很多加密库,但我没有找到一个具有纯 Objective-C(或面向对象)API 的库。 这个实现基于BigInteger的OpenJava实现,现在加密非常好用,...

    基于iOS平台的数据加密系统的设计与实现(Xcode,AES,Objective-C,IOS平台)

    此毕业论文设计为在虚拟机VMware下,MAC平台的开发平台XCode下基于OBjective-C语言的数据加密系统设计与实现,此加密系统为AES加密体系。 上传文件工程需在MAC平台下开发软件Xcode才能打开,打开里面有界面及程序...

    EncryptionTools(Objective-C)

    在给定的"EncryptionTools(Objective-C)"项目中,开发者提供了一个简单易用的库,专门针对Objective-C的对称加密操作进行了封装,特别是对于DES(Data Encryption Standard)和AES(Advanced Encryption Standard...

    通用AES加密版本

    在Objective-C中,AES加密通常使用CommonCrypto库来实现。这个库提供了各种加密算法,包括AES。开发者可以使用`CCCrypt`函数进行加密和解密操作,需要设置密钥、初始化向量(IV)以及操作模式(如ECB、CBC等)。 在...

    iOS AES加密解密

    以下是使用Objective-C进行AES加密的基本步骤: 1. 导入库:在你的.m文件顶部添加`#import &lt;CommonCrypto/CommonCryptor.h&gt;`。 2. 选择模式:AES有多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block ...

    ios-AES 加密.zip

    在这个项目中,开发者wyxlh提供了Objective-C实现的AES加密和解密功能,便于iOS开发者集成到自己的应用程序中。 AES加密是一种块密码,它基于替换和置换操作,使用相同的密钥进行加密和解密。AES有三个主要参数:...

    aesjava源码-AESCipher-iOS:Objective-C和Java之间的AES加密

    Objective-C 的 AES 加密 将此代码用于iOS以及Android和Java 后端,您可以使用 AES 准确地加密和解密。 用 C 风格编码只是为了安全。 加密: // For String NSString * aesEncryptString(NSString *content, ...

    react-native-aes-kit:AES-CBC-PKCS5填充

    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 AES加密 iOS

    `AESEncryption.h` 和 `AESEncryption.m` 文件很可能是实现AES加密功能的Objective-C类。在这个类中,通常会有以下方法: 1. **初始化方法**:用于设置加密或解密所需的密钥,密钥长度通常有128、192和256位三种...

    AESEncryption,如何在android和ios中实现aes加密的演示.zip

    - iOS子目录:包含iOS工程,展示如何在Swift或Objective-C中实现AES加密。 - 共享资源:可能包括密钥生成、密文转换等跨平台的实用函数。 6. **注意事项**: - 安全存储密钥:不要将密钥硬编码在应用中,避免被...

    AES加密解密,iOS,Android,Java,.Net通用

    AES加密有多种算法模式,下面提供两套模式的可用源码: 一、CBC(Cipher Block Chaining,加密块链)模式 二、ECB(Electronic Code Book,电子密码本)模式 其中CBC模式下,有.NET的源码。而ECB模式的,大家在网上找...

    react-native-aes-crypto-muevo:react-native-aes-crypto的向后兼容实现

    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和object C都可以用的AES加密算法"中,我们关注的是一个跨平台的加密解决方案,它允许开发者在Java和Objective-C这两种不同的编程语言中实现相同的安全标准。AES(Advanced Encryption Standard)...

    RSACryptor(Objective-C)

    `RSACryptor`是Objective-C中对RSA加密算法的封装,它简化了加密和解密过程,为开发者提供了便捷的接口。 1. **生成秘钥对** RSA算法的核心是公钥和私钥的生成。`RSACryptor`能够帮助开发者创建一对密钥,公钥用于...

Global site tag (gtag.js) - Google Analytics