iOS加密方式(RSA签名加密、AES加密等)
来源:互联网 发布:贵州通软件骗局 编辑:程序博客网 时间:2024/06/06 01:51
之前项目中采取的加密方式,只是对于重要的参数进行AES加密,再将各个参数拼接而成,通过MD5签名后形成最后一个参数。目前,改用了RSA签名的方式进行加密。
AES加密
主要针对于些重要的参数进行加密,如账号、密码等,具体代码实现可下Demo查看
//AES加密- (NSData *)AES128EncryptedDataWithKey:(NSString *)key iv:(NSString *)iv{ return [self AES128Operation:kCCEncrypt key:key iv:iv];}//AES解密- (NSData *)AES128DecryptedDataWithKey:(NSString *)key iv:(NSString *)iv{ return [self AES128Operation:kCCDecrypt key:key iv:iv];}- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv{ char keyPtr[kCCKeySizeAES128 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); if (iv) { [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; } NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil;}
DES加密
//des加密 + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key { char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; voidvoid *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeDES, NULL, [data bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil; }
//des解密 + (NSData *)DESDecrypt:(NSData *)data WithKey:(NSString *)key { char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; voidvoid *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeDES, NULL, [data bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); return nil; }
MD5加密
MD5加密一般用于数据准确性检测,加密结果不可逆,一般用于不需要解密的地方.
iOS SDK自带有MD5加密的框架CommonCrypto,使用时导入即可。
可以根据需要选择16位、32位、64位的。
#import "CommonCrypto/CommonDigest.h"+ (NSString *)md5HexDigest:(NSString*)input{ const char* str = [input UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(str, strlen(str), result); NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];// for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) { [ret appendFormat:@"%02X",result[i]]; } return ret;}
RSA加密、解密和签名、验签
加密主要是做加密操作,防止信息泄露。
加签主要是为了防恶意攻击,防止别人模拟我们的客户端对我们的服务器进行攻击,避免服务器瘫痪。
公钥、私钥
公钥、私钥可以使用字符串的形式,也可以用文件的形式。
RSA加密:公钥放在客户端,并使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密。
RSA加签:私钥放在客户端,并使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。
RSA加密、解密
RSA加密只需要导入Security.framework框架即可使用 这篇文章有详细的代码可参考,Demo中也有,使用起来比较简单。
这里使用的密钥文件是.der和.p12格式,与java不同
RSA加密文章
RSA签名、验签
签名和加密使用的是不同的方法,使用下面这个库可以实现RSA签名(这个库也可实现RSA加密解密的功能)
iOSRSAHandler
签名方式有两种:1.MD5+RSA 2.sha+RSA 本库中的sha加密使用的是sha1,我改成了sha256
其他
base64加密
主要用于隐藏明文,信息可以随意进行解密,iOS 也提供了Base64加密的api,使用非常简单。
凯撒加密
凯撒加密是一种简单的文字替换加密。例如将字符串中的前几位进行替换。 考虑到加密内容不只是英文字母。此处改进使用ASCII码偏移进行加密解密。
Demo下载
iOS加密Demo
- iOS加密方式(RSA签名加密、AES加密等)
- java 加密工具类(MD5、RSA、AES等加密方式)
- 加密方式-非对称加密(RSA加密与签名)
- AES与RSA加密
- AES/RSA加密机制
- iOS - 加密 Base64 MD5 DES AES RSA
- iOS RSA,AES加密(使用openssl)
- iOS-关于MD5加密,AES加密,RSA加签验签
- RSA加密使用方式及签名验证
- openssl rsa加密签名
- RSA签名加密
- openssl rsa加密签名
- RSA签名加密
- 加密方式-对称加密(AES)
- iOS RSA加密 签名与验签
- 信息安全第一次作业,AES CBC加密,RSA密钥签名
- python实现aes加密解密,RSA签名和验签,RSA加密解密,并调用接口
- python实现aes加密解密,RSA签名和验签,RSA加密解密,并调用接口
- css基础3
- 安装SQLyog、Navicat for MySQL之后数据库无法连接的问题
- 树状数组初步_ZERO
- NYOJ 199 无线网络覆盖
- PHP数据类型
- iOS加密方式(RSA签名加密、AES加密等)
- 程序
- Java环境变量配置
- java代码操作Redis数据库
- JQuery:通过属性addClass、removeClass和toggleClass实行增加和删除类
- 安卓状态选择器
- Android Json解析
- struts2标签与js配合使用
- Activity的生命周期