范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SHA1算法详解和C实现

  背景介绍
  SHA-1算法也称安全散列算法1,可以将一个最大2^{64}-1的数据生成一个160位的数据摘要。尽管SHA-1算法已经被认为不再安全,但仍有部分应用使用SHA-1算法验证文件。 算法原理类型定义
  在介绍算法原理之前,有必要定义一些数据类型,有助于我们脱离具体编程语言分析这个算法。我这里使用C++的定义方式,不会C++也没有问题,我会解释代码的意义。 typedef __UINT8_TYPE__ BYTE; typedef __UINT32_TYPE__ WORD; typedef __UINT64_TYPE__ DWORD;
  上面定义了三个数据类型,分别是: BYTE  ,字节,由8位二进制数组成,表示范围(0x0 - 0xFF)。 WORD  ,字,由32位二进制数组成,表示范围(0x0 - 0xFFFFFFFF)。 DWORD  ,双字,两个字组成,表示范围(0x0 - 0xFFFFFFFFFFFFFFFF) 算法剖析
  (以下算法分析均建立在大端存储的基础之上,关于大端存储与小端存储对算法的影响,请见C++实现部分关于大端存储与小端存储的具体实现。)
  输入: 不定长度的字节序列(最大为2^{64}-1位)。
  输出: 160位数据摘要。
  输入不必多说,这里说一下输出。SHA-1算法最终产生160位数据摘要,这实际上由5个变量存储,每个变量存储32位信息,也就是说,这160为数据摘要存储在5个 WORD  中(5	imes 32=160), 这五个变量被定义为:A,B,C,D,E 。他们都有初始值,分别为: WORD A = 0x67452301; WORD B = 0xEFCDAB89; WORD C = 0x98BADCFE; WORD D = 0x10325476; WORD E = 0xC3D2E1F0;
  SHA-1算法的过程就是利用输入的字节序列,不断更新这五个变量,最后将这五个变量按字节拼接,就得到160位的数据摘要。具体过程如下: 1. 数据预处理
  SHA-1算法的基本运算单位是一个块(block),一个块的大小为512位,即64字节。输入的数据位数按512被不断分块。如果数据不能被512整除,也就是说最后一部分数据不能填满一块怎么办呢?实际上即便最后一部分填满512位,我们依旧要进行更进一步处理,除非最后一部分刚好等于448位,也就是56个字节。因为我们需要最后一块的最后64个字节填入整个数据的位数长度。所以我们输入的数据有以下两种情况: 数据位数长度对512取余刚好等于448。 数据位数长度对512取余不等于448。
  对情况1:我们只需要在最后64位中填入输入数据的位数长度即可。
  对情况2:这里相对情况1更为复杂,需要进行 补位 。
  什么是补位呢?我们需要在数据最后补上一个1,然后全部补0直到数据长度对512取余等于448。例如我们数据为: 10011010  ,长度为8位,补位后为: 10011010 1000...0  ,中间空格为了区分补位数据。补位完成后,最后填入的数据长度依旧是8,补位数据不计入数据长度。 2. 生成子组
  由于SHA-1算法的基本运算单位是一个块,所以我们只需对上面分完的这么多个块中讨论一个即可。
  对于给定的一个块,512位,我们需要再分成16个子组,每个子组32位。也就是一个 WORD  ,记为w_0, w_1, ..., w_{15},我们需要这16个子组,再生成64个子组,记为w_{16},w_{17},...,w_{79}。生成算法如下:
  $
  w_{i} = w_{i-3}oplus w_{i-8}oplus w_{i-14}oplus w_{i-16}
  $
  其中i in {16, ..., 79},oplus表示异或,在C++中对应运算符为 ^  。 3. 80次核心循环
  在循环开始之前,我们需要得到一组A,B,C,D,E五个变量的拷贝,记为a,b,c,d,e。 WORD a = A, b = B, c = C, d = D, e = E;
  接下来我们需要执行一个80次的循环,每次循环都利用到a,b,c,d,e,以及一个子组。
  第1个20次循环(0 < i < 19): WORD temp = (b & c) | ((~b) & d) + 0x5A827999; WORD temp2 = a << 5 | a >> 27; e = d; d = c; c = b << 30 | b >> 2; b = a; a = temp + temp2 + e + w[i];
  第2个20次循环(20 < i < 39): WORD temp = (b ^ c ^ d) + 0x6ED9EBA1; WORD temp2 = a << 5 | a >> 27; e = d; d = c; c = b << 30 | b >> 2; b = a; a = temp + temp2 + e + w[i];
  第3个20次循环(40 < i < 59): WORD temp = (b & c) | (b & d) | (c & d) + 0x8F1BBCDC; WORD temp2 = a << 5 | a >> 27; e = d; d = c; c = b << 30 | b >> 2; b = a; a = temp + temp2 + e + w[i];
  第4个20次循环(60 < i < 79): WORD temp = (b ^ c ^ d) + 0xCA62C1D6; WORD temp2 = a << 5 | a >> 27; e = d; d = c; c = b << 30 | b >> 2; b = a; a = temp + temp2 + e + w[i];
  执行完之后,这一块的运算已经完成,只需要更新A,B,C,D,E的值即可。 A += a; B += b; C += c; D += d; E += e;
  之后即可进行下一块运算。 C++实现大小端问题
  值得注意的是,SHA-1算法建立在大端存储的基础上,包括填入数据长度时,最后64个字节也是按照大端存储来分配的。但是如果机器是小端存储,这边就会出问题,问题出现的地方在:循环位移运算、加法运算。所以如果是小端存储的机器,必须保证在实际内存上数据的排列按SHA-1算法要求,那么我们必须在取出数据和存入数据时反转数据。 大文件分批次读取计算的问题
  关于大文件无法一次性读入内存时,SHA-1算法支持分批次读入,这是由于SHA-1算法计算基础单位是一个块决定的,所以读入大文件时,需要一个变量记住不断累计的文件长度,并且读入数据满一个块时立即计算并清空块缓冲区,等待下一组数据读入。 具体实现
  关于C++的具体实现部分我已经在Github上开源,项目为GitHub - andsssf/justsha1: just implement sha1 algorithm,欢迎各位点个star。

第三代充电桩量产在即!高增长潜力股全梳理今日充电桩概念股迎来大涨,截至发文,东方电子佛然能源天通股份中闽能源涨停杉杉股份国轩高科金杯电工等10股涨超5。8月以来,比亚迪思源电气中鼎股份爱康科技扬杰科技国电南瑞捷捷微电等7主力资金32亿抢筹汽车股!长安汽车净流入18亿市场点评8月19日,沪指早盘低开低走,盘中一度跌超1,再度试探年线支撑,午后跌幅收窄,成功站稳年线,后市有望企稳走强,展开进一步反弹。创业板指今日走势强于主板,午后持续拉升走高,盘绿电概念多股涨停!高增长潜力股仅5只今日电力板块强势上涨,截至发文,中国核电上海电力中闽能源等16涨停,中闽能源5连板晶科科技川能动力协鑫能科等多股创下历史新高。指数大涨超4创五年来新高,主力资金净流入近5。7亿元。主力资金超80亿抢筹证券股!贵州茅台净流入23亿元市场点评9月1日,沪指小幅上涨0。65报收3567。10点,深成指微跌0。1报收14314。09点,创业板指跌0。85报3186。85点两市成交额再创年内新高达17111亿元,北向主力资金46亿抢筹证券股!包钢股份净流入22。77亿元大盘数据今日两市全天上涨2390家,下跌1867家,193家平盘。沪指上涨1。07,主力资金净流入67。53亿元。创业板指上涨1。12,主力资金净流出37。18亿元。行业板块行业板主力资金56亿抢筹电气股!隆基股份净流入20。99亿元大盘数据今日两市全天上涨2666家,下跌1637家,147家平盘。涨停数109家,跌停4家。上证指数上涨0。74,主力资金净流入33。99亿元。创业板指上涨0。54,主力资金净流出主力资金25亿抢筹白酒股!三峡能源两日净流入36亿元大盘数据今日两市全天上涨2450家,下跌1889家,116家平盘。涨停数68家,跌停30家。沪指下跌0。43,主力资金净流入286。36亿元。创业板指下跌1。17,主力资金净流出7主力资金21亿抢筹有色股!比亚迪净流出17亿元市场点评沪指跌逾1险守3500点,创业板指大跌2。5,煤炭钢铁有色等周期股逆势上扬,酿酒医药农业等板块领跌两市合计成交13743亿元,北向资金净流入12。29亿元。经过连续三天的上券商9月金股来了!顺周期关注度升温据统计,截至8月31日,共有12家券商发布9月投资组合,共推荐了102只A股。涵盖了计算机有色军工机械化工汽车等行业。9月券商推荐家数较多个股长城汽车连续2月成为券商最看好的金股之主力资金64亿抢筹有色股!中信证券净流入19亿元大盘数据今日两市全天上涨2087家,下跌2265家,101家平盘。涨停数107家,跌停28家。沪指上涨0。45,主力资金净流入12。71亿元。创业板指下跌1。76,主力资金净流出1主力资金两日124亿抢筹券商股!东方财富净流入27亿元大盘数据今日两市全天上涨2914家,下跌1385家,161家平盘。涨停数116家,跌停5家。沪指上涨1。51,总成交额6588。68亿元深成指上涨1。07,总成交额7434。89亿
互联网公司是如何设计会员体系的?灵兽山观点相较于线下门店,互联网公司的产品最大的优势是零边际成本,线下实体店为了获客提供限量引流品需付出成本,而互联网产品每增加一个用户几乎不新增成本。线下店设计会员体系多围绕积分FAAMG本周公布财报,大型科技股能否走出阴霾?香港万得通讯社报道,华尔街将迎来繁忙的一周,苹果微软等大型科技公司的收益报告即将出炉,为投资者带来科技企业未来走向的新线索。标普500指数中权重最大的几家公司微软(Microsof17款移动App存在隐私不合规行为被通报包括中邮证券西部证券等来源中国经济网据新华社报道,国家计算机病毒应急处理中心近期通过互联网监测发现17款移动App存在隐私不合规行为,包括中邮证券西部证券优顾炒股等,违反网络安全法个人信息保护法等相关规佳能1200mmf5。6LISUSM镜头Canon800mm1200mm新品佳能1200mmf5。6LISUSM镜头RF卡口全画幅镜头光圈范围f8至64萤石SuperUD超低色散和UD超低色散镜片元素AirSphere和欧洲立法者将于4月25日展开关于Web3时代加密税收的讨论金色财经消息,欧洲立法者将于4月25日讨论如何收紧Web3时代的税法和程序。欧洲议会葡萄牙议员LidiaPereira编写的一份报告草案表明,国家税务机关有权交换个人持有的加密资产vivoXFold今日开售站长之家(ChinaZ。com)4月22日消息4月22日上午1000,vivo旗下首款折叠屏手机vivoXFold将正式开售,据京东商品预约页面显示,目前已有17万用户预约抢购。v最前线甲骨文企业可持续发展调研73中国受访者认为人工智能可在人类难以突破的领域取得成功近日,甲骨文公司和首席信息官顾问兼哈佛职业发展讲师PamelaRucker联合进行的一项最新研究显示,世界各地的人们都要求在可持续发展和社会贡献方面取得更多进展,并希望企业采取切实睡眠仪改善睡眠质量真的有效吗?左点睡眠仪亲身体验面对工作和生活的快节奏,很多朋友都会面临因为长期的加班熬夜情绪波动负面压力等出现睡眠质量差甚至失眠的情形长此以往,不仅会影响正常的工作和生活,还会给个人身体健康带来隐患。作为一名长了解JavaScript变量提升什么是变量提升变量提升(Hoisting)被认为是,JavaScript中执行上下文工作方式的一种认识。从概念的字面意义上说,变量提升意味着变量和函数的声明会在物理层面移动到全局代强力推荐几款好用的手机浏览器浏览器是每个人手机上必备的应用之一,市面上鱼龙混杂的浏览器多不胜数,而到底哪款浏览器更加安全好用高效,给大家分享下自己的经验。首先小编认为,我们在推荐之前要先认清浏览器的本质是用来虎牙斗鱼被曝大裁员?斗鱼回应信息不实,只有一些正常的人员优化调整每经记者温梦华每经编辑陈俊杰4月24日,有媒体报道称,虎牙近日整体大裁员,此报道还显示斗鱼近期也在开启裁员行动,有内部人员介绍称,斗鱼直播整体裁员30。对此消息,每日经济新闻记者第