iOS-关于MD5加密,AES加密,RSA加签验签
来源:互联网 发布:win7怎么远程控制mac 编辑:程序博客网 时间:2024/05/20 07:14
//RSA加签
加密:公钥放在客户端,并使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密;
加签:私钥放在客户端,并使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。
//RSA加签 plainStr为加密字段 privKey为私钥(用户保存)+ (NSString *)rsaSHA1SignStr:(NSString *)plainStr privateKey:(NSString *)privKey{ NSData *data = [plainStr dataUsingEncoding:NSUTF8StringEncoding]; NSData *signData = [self rsaSHA1SignData:data privateKey:privKey]; return [signData base64EncodedStringWithOptions:0];}
+ (NSData *)rsaSHA1SignData:(NSData *)plainData privateKey:(NSString *)privKey { SecKeyRef key = [self addPrivateKey:privKey]; size_t signedHashBytesSize = SecKeyGetBlockSize(key); uint8_t* signedHashBytes = malloc(signedHashBytesSize); memset(signedHashBytes, 0x0, signedHashBytesSize); // bzero(signedHashBytes, signedHashBytesSize); size_t hashBytesSize = CC_SHA1_DIGEST_LENGTH; uint8_t* hashBytes = malloc(hashBytesSize); if (!CC_SHA1([plainData bytes], (CC_LONG)[plainData length], hashBytes)) { return nil; } SecKeyRawSign(key, kSecPaddingPKCS1SHA1, hashBytes, hashBytesSize, signedHashBytes, &signedHashBytesSize); NSData* signedHash = [NSData dataWithBytes:signedHashBytes length:(NSUInteger)signedHashBytesSize]; if (hashBytes) free(hashBytes); if (signedHashBytes) free(signedHashBytes); return signedHash;}
//RSA验签+ (BOOL)rsaSHA1VerifyStr:(NSString *)plainStr withSignature:(NSString *)signStr publicKey:(NSString *)pubKey{ NSData *data = [plainStr dataUsingEncoding:NSUTF8StringEncoding]; NSData *signData = [[NSData alloc] initWithBase64EncodedString:signStr options:0]; return [self rsaSHA1VerifyData:data withSignature:signData publicKey:pubKey];}+ (BOOL)rsaSHA1VerifyData:(NSData *)plainData withSignature:(NSData *)signature publicKey:(NSString *)pubKey { SecKeyRef key = [self addPublicKey:pubKey]; size_t signedHashBytesSize = SecKeyGetBlockSize(key); const void* signedHashBytes = [signature bytes]; size_t hashBytesSize = CC_SHA1_DIGEST_LENGTH; uint8_t* hashBytes = malloc(hashBytesSize); if (!CC_SHA1([plainData bytes], (CC_LONG)[plainData length], hashBytes)) { return NO; } OSStatus status = SecKeyRawVerify(key, kSecPaddingPKCS1SHA1, hashBytes, hashBytesSize, signedHashBytes, signedHashBytesSize); return status == errSecSuccess;}
AES加密解密
//加密 key为密钥-(NSString *) aes256_encrypt:(NSString *)key{ const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; //对数据进行加密 NSData *result = [data AES256EncryptWithKey:key]; //转换为2进制字符串 if (result && result.length > 0) { Byte *datas = (Byte*)[result bytes]; NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2]; for(int i = 0; i < result.length; i++){ [output appendFormat:@"%02x", datas[i]]; } return output; } return nil;}//解密-(NSString *) aes256_decrypt:(NSString *)key{ //转换为2进制Data NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2]; unsigned char whole_byte; char byte_chars[3] = {'\0','\0','\0'}; int i; for (i=0; i < [self length] / 2; i++) { byte_chars[0] = [self characterAtIndex:i*2]; byte_chars[1] = [self characterAtIndex:i*2+1]; whole_byte = strtol(byte_chars, NULL, 16); [data appendBytes:&whole_byte length:1]; } //对数据进行解密 NSData* result = [data AES256DecryptWithKey:key]; if (result && result.length > 0) { return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; } return nil;}
MD5加密
#pragma mark - 32位 小写- (NSString *)MD5ForLower32Bate{ //要进行UTF8的转码 const char* input = [self UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02x", result[i]]; } return digest;}#pragma mark - 32位 大写- (NSString *)MD5ForUpper32Bate{ //要进行UTF8的转码 const char* input = [self UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02X", result[i]]; } return digest;}#pragma mark - 16位 大写- (NSString *)MD5ForUpper16Bate{ NSString *md5Str = [self MD5ForUpper32Bate]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string;}#pragma mark - 16位 小写- (NSString *)MD5ForLower16Bate{ NSString *md5Str = [self MD5ForLower32Bate]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string;}
阅读全文
0 0
- iOS-关于MD5加密,AES加密,RSA加签验签
- iOS - 加密 Base64 MD5 DES AES RSA
- DES,RSA,MD5,AES加密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- RSA、DES 、AES、MD5加密、解密
- java 加密技术AES、MD5、RSA
- iOS,一行代码进行RSA、DES 、AES加密、解密及MD5加密
- iOS简单介绍RSA、DES 、AES加密、解密及MD5加密
- iOS加密方式(RSA签名加密、AES加密等)
- iOS RSA,AES加密(使用openssl)
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密(转)
- iOS 面试问答之加密形式: AES加密, DES加密, MD5加密,SHA1加密, BASE64加密
- AES与RSA加密
- AES/RSA加密机制
- 改变EditText光标的颜色
- php输出mysqli查询出来的结果
- 我自己做的网上项目目录
- vijos1441 打鼹鼠
- 证明:EXACT 4SAT is NP-complete
- iOS-关于MD5加密,AES加密,RSA加签验签
- #736 – 通过代码获取硬件支持的最大触摸点数(Finding the Maximum Number of Touch Points at Run-time)
- 如何把svn项目变成普通项目
- 5.4-全栈Java笔记:面向对象进阶之对象的转型 | FINAL关键字 |抽象方法和抽象类
- Python学习笔记【五】——《python基础教程》:: 条件、循环和其他语句
- DB2 的REORG_学习(3)_索引重组
- framework7---framework7下关于导航栏和工具栏的几种布局类型
- 硅谷游记|机智云硅谷行第二季完美收官
- 出现“There is a cycle in the hierarchy”异常