iOS-数据摘要的生成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Feng512275/article/details/83019592

背景

首先我们要知道什么是数据摘要,数据摘要是干什么用的。

数据摘要是不可逆的,其功能有数据签名、数据完整性校验等。
常见的数据摘要算法有MD5、SHA1、SHA256、SHA384,下面使用SHA256完成实验。


实验要求

  1. 编程语言不限制
  2. 自选一段不少于500字的关于数据摘要算法的文字
  3. 摘要算法不能是MD5
  4. 输出摘要
  5. 改动原始文件中的一个字符,再次输出摘要
  6. 对比两个摘要变化了多少(统计不同的位数)

代码

#import "ViewController.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCrypto.h>
#import <CommonCrypto/CommonHMAC.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // 在线工具校验 http://www.atool.org/hash.php
    NSString *textPlain = @"近年来,随着互联网技术蓬勃发展、信息化的高度发达和移动通信技术的广泛应用,每个人都能在互联网+的时代下迎来了新的机遇和新的挑战。如今是一个多元化的时代,互联互通超越时空差距,使组织与用户、人与人之间的距离零成本趋近,无障碍沟通与交流价值倍增。这意味着每个街边小摊都可以结合互联网来进行商业销售,也意味着街边小摊主要随时应对市场和客户的需求变化。而传统的摆摊模式无法快速高效地让本摊的宣传做出调整,这对每个摊主来说都是一个低效率的销售模式。一方面,如果摊主每次摆摊在临时地点,那么摊主服务的顾客就几乎是一次性的,顾客下一次也几乎找不到这个小摊。另一方面,摊主如果每次增加新的菜品和食品,顾客也无法及时知道该小摊推出新品。移动小摊软件使用地图对小摊信息进行展示,能够极大程度地实时更新小摊位置和小摊列表信息,提高摊主摆摊的摆摊效率。1.2 国内外研究现状大约上世纪90年代开始,欧美等发达国家对食品的监控越来越严格,并且政府对乱摆摊的行为肃清。由此,欧美等发达国家的摊主开始使用移动车进行摆摊。摊主在贯彻国家政策的同时,并且结合自己的摆摊经验在实践上取得了成果,达到了较高的摆摊水平。我国计算机发展时间较短,个人信息化和自动化的水平较低,受到国内资源和政策的影响,目前国内大部分摊主都是采用传统的摆摊模式,仅少部分摊主效仿欧美等发达国家的摊主使用移动车进行摆摊。对于顾客而言,顾客无法得知附近有多少小摊以及小摊的摆摊食品信息。对于摊主而言,由于受到服务范围的限制,摊主也无法对自己小摊进行大力度宣传。我们应该把先进的计算机技术和科学信息管理结合,勇于创新,把研究成果运用到实际的商业中,提高摊主的摆摊效率,降低摆摊的时间成本。";
    NSString *dataSummary = [self SHA256Hash:textPlain];
    NSUInteger length = dataSummary.length;
    NSLog(@"未修改前数据摘要:%@",dataSummary);
    NSLog(@"未修改前摘要长度:%lu",(unsigned long)length);
    NSString *textPlain1 = @"十年后,随着互联网技术蓬勃发展、信息化的高度发达和移动通信技术的广泛应用,每个人都能在互联网+的时代下迎来了新的机遇和新的挑战。如今是一个多元化的时代,互联互通超越时空差距,使组织与用户、人与人之间的距离零成本趋近,无障碍沟通与交流价值倍增。这意味着每个街边小摊都可以结合互联网来进行商业销售,也意味着街边小摊主要随时应对市场和客户的需求变化。而传统的摆摊模式无法快速高效地让本摊的宣传做出调整,这对每个摊主来说都是一个低效率的销售模式。一方面,如果摊主每次摆摊在临时地点,那么摊主服务的顾客就几乎是一次性的,顾客下一次也几乎找不到这个小摊。另一方面,摊主如果每次增加新的菜品和食品,顾客也无法及时知道该小摊推出新品。移动小摊软件使用地图对小摊信息进行展示,能够极大程度地实时更新小摊位置和小摊列表信息,提高摊主摆摊的摆摊效率。1.2 国内外研究现状大约上世纪90年代开始,欧美等发达国家对食品的监控越来越严格,并且政府对乱摆摊的行为肃清。由此,欧美等发达国家的摊主开始使用移动车进行摆摊。摊主在贯彻国家政策的同时,并且结合自己的摆摊经验在实践上取得了成果,达到了较高的摆摊水平。我国计算机发展时间较短,个人信息化和自动化的水平较低,受到国内资源和政策的影响,目前国内大部分摊主都是采用传统的摆摊模式,仅少部分摊主效仿欧美等发达国家的摊主使用移动车进行摆摊。对于顾客而言,顾客无法得知附近有多少小摊以及小摊的摆摊食品信息。对于摊主而言,由于受到服务范围的限制,摊主也无法对自己小摊进行大力度宣传。我们应该把先进的计算机技术和科学信息管理结合,勇于创新,把研究成果运用到实际的商业中,提高摊主的摆摊效率,降低摆摊的时间成本。";
    NSString *dataSummary1 = [self SHA256Hash:textPlain1];
    NSUInteger length1 = dataSummary1.length;
    NSLog(@"修改后数据摘要:%@",dataSummary1);
    NSLog(@"修改后前摘要长度:%lu",(unsigned long)length1);
    //flag计数两个字符串不同的地方个数
    int flag = 0;
    for (int i = 0; i < length - 1; i ++) {
        char a = [dataSummary characterAtIndex:i];
        char b = [dataSummary1 characterAtIndex:i];
        if (a==b) {
//            NSLog(@"一样");
        }
        else
        {
            flag++;
//            NSLog(@"不一样");
        }
    }
    NSLog(@"修改后,摘要变化为个数:%d",flag);
}
/**
 SHA256提取数摘要(中文或英文都可以)

 @param plainText 原文
 @return 生成的数据摘要
 */
- (NSString *)SHA256Hash:(NSString *)plainText
{
    const char *str = plainText.UTF8String;
    unsigned char *digest;
    digest = malloc(CC_SHA256_DIGEST_LENGTH);
    CC_SHA256(str, (CC_LONG)strlen(str), digest);
    NSString *encode = [self stringFromBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    free(digest);
    return encode;
}
/**
 字节转化为字符串
 字符大小写可以通过修改“%02X”中的x修改,下面采用的是大写
 */
- (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {
    NSMutableString *strM = [NSMutableString string];
    for (int i = 0; i < length; i++) {
        [strM appendFormat:@"%02X", bytes[i]];
    }
    return [strM copy];
}
@end

在这里插入图片描述


总结

本次实验,我对数据摘要算法有了进一步的了解。提取数据摘要的方法有很多,有MD5,有SHA-1,SHA128,SHA224,SHA256,在这次实验,我使用的是SHA256的算法来提取摘要。并且,提取数据摘要的来源可以是文本文字、文件、图像等等,而且对只要原文信息稍微改变,生成的数据摘要就完全不一样。比如,我在实验中,我只是在原文信息开头修改了三个字,生成的数据摘要就完全不一样了。并且,生成的数据摘要是不可逆的。最后,我使用for循环,对两个生成的数据摘要逐个比较,计算出原文修改后,生成的数据摘要有多少个是不一样的。
实验中遇到的问题:
(1)使用苹果的原生代码,原文不支持中文,只支持英文和数字,否则程序会崩溃。
(2)我怎么知道我生成的数据摘要就是对的呢?
解决办法:
(1)先让字符串转化为UTF8格式的字符常量指针,然后再重新申请内存空间,使用苹果自带的SHA256提取数据摘要方法,然后转码重新生成数据摘要字符串。
(2)百度搜索数据摘要在线脚本,在在线网站上面输入原文信息,把得出的数据摘要信息和我生成的数据摘要信息进行对比。

猜你喜欢

转载自blog.csdn.net/Feng512275/article/details/83019592