iOS sha256加密

作者: Just_go | 来源:发表于2017-03-10 10:44 被阅读3837次

后台要对特定字符串进行加密, 在网上找了些代码, 都是错的, 特此总结一下

哈希值用作表示大量数据的固定大小的唯一值。数据的少量更改会在哈希值中产生不可预知的大量更改。
sha256 的作用就是防止数据被篡改

建NSString分类

#import <Foundation/Foundation.h>

@interface NSString (SHA256)

- (NSString *)SHA256;

@end
#import "NSString+SHA256.h"
#import <CommonCrypto/CommonDigest.h>

@implementation NSString (SHA256)

- (NSString *)SHA256
{
    const char *s = [self cStringUsingEncoding:NSASCIIStringEncoding];
    NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];

    uint8_t digest[CC_SHA256_DIGEST_LENGTH] = {0};
    CC_SHA256(keyData.bytes, (CC_LONG)keyData.length, digest);
    NSData *out = [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    NSString *hash = [out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
    return hash;
}

@end

如果是后台对key加密的话

#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonHMAC.h>
- (NSString *)hmac:(NSString *)plaintext withKey:(NSString *)key
{
    const char *cKey  = [key cStringUsingEncoding:NSASCIIStringEncoding];
    const char *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 char *buffer = (const unsigned char *)[HMACData bytes];
    NSMutableString *HMAC = [NSMutableString stringWithCapacity:HMACData.length * 2];
    for (int i = 0; i < HMACData.length; ++i){
        [HMAC appendFormat:@"%02x", buffer[i]];
    }

    return HMAC;
}

更新swift3加密代码

func sha256() -> String{
        if let stringData = self.data(using: .utf8) {
            return hexStringFromData(input: digest(input: stringData as NSData))
        }
        return ""
    }
    
    private func digest(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
    }

在桥接文件中 #import <CommonCrypto/CommonDigest.h>

附上验证sha加密的网址: http://www.atool.org/hash.php
参考文章:http://www.jianshu.com/p/2e853f23ac8d
http://www.jianshu.com/p/98e376b66a26

相关文章

  • iOS sha256 加密[包括中文]

    SHA256谷歌搜到的第一条 SHA256 加密的简书文章,提供的 SHA256 加密是不完善的,在对中文加密时会...

  • sha256加密iOS

    哈希值用作表示大量数据的固定大小的唯一值。数据的少量更改会在哈希值中产生不可预知的大量更改。sha256 的作用就...

  • iOS sha256加密

    后台要对特定字符串进行加密, 在网上找了些代码, 都是错的, 特此总结一下 哈希值用作表示大量数据的固定大小的唯一...

  • 区块链的简单实现

    区块 区块连接 挖矿难度设计和SHA256加密

  • iOS13 sha256加密

    #pragma mark ====== SHA256加密小写 - (NSString *)SHA256With:(...

  • Digest vs Encryption 摘要 vs 加密

    网上会经常出现sha256加密的、md5加密算法等字眼,对于这样的描述经常会产生误解,sha256和md5都属于散...

  • Android网络加密

    加解密的技术分类 哈希函数 - SHA256、MD5 对称加密 - AES 、DES 非堆成加密 - RSA ...

  • vue-cli中HamcSHA256加密

    在线加密解密地址 安装依赖 在文件中引入 字符串加密 对象 各种语言HMAC SHA256实现

  • SHA256加密

    NSString分类

  • sha256加密

    一、简介 哈希值用作表示大量数据的固定大小的唯一值。数据的少量更改会在哈希值中产生不可预知的大量更改。 SHA25...

网友评论

  • 冰涛:为什么要过滤 空格,< > 号呢?
  • 不辣先生:加密的字符串中有空格会怎样?
  • 米苏芊:中文就为nil
    简了个书1993:编码 NSASCIIStringEncoding 改为 NSUTF8StringEncoding 即可
    Just_go:这个倒是没有考虑到, 一般没有中文吧.

本文标题:iOS sha256加密

本文链接:https://www.haomeiwen.com/subject/rosngttx.html