chenzhao

  • java
  • iOS
  • IT
知识积累
不积跬步无以至千里
  1. 首页
  2. iOS
  3. 正文

IOS 加密整理

2016年 10月 20日 110点热度 0人点赞 0条评论

SHA 加密:

oc 写法,转得忘记出处了

//
//NSString+SHA.h
//
 
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
 
@interface NSString(SHA)
-(NSString *) sha1;
-(NSString *) sha224;
-(NSString *) sha256;
-(NSString *) sha384;
-(NSString *) sha512;
@end
 
#import "NSString+SHA.h"



@implementation NSString (SHA)
-(NSString *) sha1{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x",digest[i]];
    }
    return output;
}

-(NSString *) sha224{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    uint8_t digest[CC_SHA224_DIGEST_LENGTH];
    CC_SHA224(data.bytes, (CC_LONG)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA224_DIGEST_LENGTH*2];
    for (int i=0; i<CC_SHA224_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x",digest[i]];
    }
    return output;
    
}
- (NSString*) sha256
{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    
    uint8_t digest[CC_SHA256_DIGEST_LENGTH];
    
    CC_SHA256(data.bytes, (CC_LONG)data.length, digest);
    
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
}

- (NSString*) sha384
{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    
    uint8_t digest[CC_SHA384_DIGEST_LENGTH];
    
    CC_SHA384(data.bytes, (CC_LONG)data.length, digest);
    
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
}

- (NSString*) sha512
{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    
    uint8_t digest[CC_SHA512_DIGEST_LENGTH];
    
    CC_SHA512(data.bytes, (CC_LONG)data.length, digest);
    
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
}


@end

下面是一个加盐的SHA加密

//  
//  HmacUtils.m  
//  Inspector  
//  
//  Created by yaoliangjun on 16/5/20.  
//  Copyright © 2016年 yaoliangjun. All rights reserved.  
//  
  
#import "HmacUtils.h"  
#import <CommonCrypto/CommonDigest.h>  
#import <CommonCrypto/CommonHMAC.h>  
  
@implementation HmacUtils  
  
/** 
 *  加密方式,MAC算法: HmacSHA256 
 * 
 *  @param plaintext 要加密的文本 
 *  @param key       秘钥 
 * 
 *  @return 加密后的字符串 
 */  
+ (NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key  
{  
    const charchar *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];  
    const charchar *cData = [plaintext cStringUsingEncoding:NSASCIIStringEncoding];  
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];  
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);  
    NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];  
    const unsigned charchar *buffer = (const unsigned charchar *)[HMACData bytes];  
    NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];  
    for (int i = 0; i < HMACData.length; ++i){  
        [HMAC appendFormat:@"%02x", buffer[i]];  
    }  
      
    return HMAC;  
}  
  
@end  

swift 3 加密 ,其他SHA 类似方法 , 桥接头中加入系统加密类库
转自: http://stackoverflow.com/questions/25388747/sha256-in-swift


/**
 *  加密系统头
 */
//#import <CommonCrypto/CommonDigest.h>
//#import <CommonCrypto/CommonCrypto.h>

//  Created by boosj on 16/10/20.
//  Copyright © 2016年 cz. All rights reserved.
//

import Foundation

public extension String{
    func sha256() -> String{
        if let stringData = self.data(using: String.Encoding.utf8) {
            return hexStringFromData(input: digestSha256(input: stringData as NSData))
        }
        return ""
    }
    
    private func digestSha256(input : NSData) -> NSData {
        let digestLength = Int(CC_SHA256_DIGEST_LENGTH)
        var hash = [UInt8](repeating: 0, count: digestLength)
        CC_SHA256(input.bytes, UInt32(input.length), &hash)
        return NSData(bytes: hash, length: digestLength)
    }
    
    private  func hexStringFromData(input: NSData) -> String {
        var bytes = [UInt8](repeating: 0, count: input.length)
        input.getBytes(&bytes, length: input.length)
        
        var hexString = ""
        for byte in bytes {
            hexString += String(format:"%02x", UInt8(byte))
        }
        
        return hexString
    }
}
标签: 暂无
最后更新:2022年 11月 11日

陈昭

IT 程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2022 chenzhao. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang