当前位置: 首页 > news >正文

用帝国cms做门户网站深圳的外贸公司有哪些

用帝国cms做门户网站,深圳的外贸公司有哪些,境外直播app,广东东莞最新情况前面一篇中我们分析了SHA的原理#xff0c;并且以SHA1为例实现了相关的算法#xff0c;在这一片中我们将进一步分析SHA2并实现之。 1、SHA简述 前面的篇章中我们已经说明过#xff0c;SHA实际包括有一系列算法#xff0c;分别是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-…前面一篇中我们分析了SHA的原理并且以SHA1为例实现了相关的算法在这一片中我们将进一步分析SHA2并实现之。 1、SHA简述 前面的篇章中我们已经说明过SHA实际包括有一系列算法分别是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。而我们所说的SHA2实际是对后面4中的统称。各种SHA算法的数据比较如下表其中的长度单位均为位 类别 SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 消息摘要长度 160 224 256 384 512 消息长度 小于 位 小于 位 小于 位 小于 位 小于 位 分组长度 512 512 512 1024 1024 计算字长度 32 32 32 64 64 计算步骤数 80 64 64 80 80 从上表中我们不难发现SHA-224和SHA-256、SHA-384和SHA-512在消息长度、分组长度、计算字长以及计算步骤各方面分别都是一致的。事实上通常认为SHA-224是SHA-256的缩减版而SHA-384是SHA-512的缩减版。所以在接下来的讨论中我们把SHA-224和SHA-256作为一组而把SHA-384和SHA-512作为另一组来讨论。在这一篇我们先来分析和实现SHA-224和SHA-256算法。 2、消息的填充与解析 在这里我们讨论的散列函数用于在计算机中将根据作为输入消息或者数据文件生成其对应的信息摘要。消息或数据文件通常被作为是位字符串。消息的长度是消息中的比特数(空消息的长度为0)。如果消息中的比特数是8的倍数那么我们就可以用十六进制来表示消息的紧凑性。消息填充的目的是为了在消息填充后在SHA-224和SHA-256中消息的长度正好是512位的整数倍。 接下来我们说明消息或者数据文件将如何实现填充。总的来说就是先添加一个“1”再后跟多个“0”然后再追加一个64位的消息长度信息使得填充完成后的消息长度正好是512位的整数倍。追加的64位的消息长度信息是原始消息的位长填充完成的消息会被分成512位的消息分组。 对于SHA-224和SHA-256来说消息的最大长度L264在对消息进行散列运算之前需要对消息做相应的填充处理。 首先在原始信息之后填充一个“1”例如如果原始信息是01010000,完成这一填充之后就是010100001。 接下来在完成上一步填充后在其后面需天充一定数量的“0”数量记为K则K的取值必须是满足下述表达式的最小非负整数值。 ( L 1 K ) mod 512 448 最后在填充完必的消息后追加64位的原始消息长度因为消息的长度不会超过264位所以其长度数据的值不会超过64位。填充完毕后所有的消息分组都将是一个512位。 3、迭代函数与常数 SHA算法这类散列算法的计算过程都需要用到逻辑函数和计算常量。但由于具体算法的不同所使用的具体的函数和常数略有差别。我们在前面的篇章中说过MD5和SHA1它们都有4个逻辑函数而在SHA2的一系列算法中都采用了6个逻辑函数。接下来将说明SHA-224和SHA-256的逻辑函数和常量。 SHA-224和SHA-256采用6个逻辑函数每个函数均基于32位字运算这些输入的32位字我们记为x、y、z同样的这些函数的计算结果也是一个32位字。这些逻辑函数表示如下 CH( x, y, z) (x AND y)XOR ( (NOT x) AND z) MAJ( x, y, z) (x AND y)XOR (x AND z) XOR (y AND z) BSIG0(x) ROTR^2(x) XORROTR^13(x) XOR ROTR^22(x) BSIG1(x) ROTR^6(x) XORROTR^11(x) XOR ROTR^25(x) SSIG0(x) ROTR^7(x) XORROTR^18(x) XOR SHR^3(x) SSIG1(x) ROTR^17(x) XORROTR^19(x) XOR SHR^10(x) SHA-224和SHA-256采用相同的64个32位的常数序列。通常记为K0、K1、……、K63这些常数的取值是前64个质数的立方根的小数部分的前32位。这些数以16进制表示如下 428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4 ab1c5ed5 d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174 e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00327c8 bf597fc7 c6e00bf3 d5a79147 06ca6351 14292967 27b70a85 2e1b2138 4d2c6dfc 53380d13 650a7354 766a0abb 81c2c92e 92722c85 a2bfe8a1 a81a664b c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa070 19a4c116 1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2 4、计算过程 前面我们已经介绍了消息的预处理及散列逻辑函数接下来我们将说明摘要的计算过程。 每个安全散列函数的输出在应用到一个分为N个分组的消息后结果记为散列量H(N)。对于SHA-224和SHA-256H(i)可以被认为是8个32位的字记为H(i)0、H(i)1、…、H(i)7。 散列字被初始化为一个特定的值并在处理完每一个消息分组后对它进行更新并在处理最后一个块后将其连接起来以产生输出。对于SHA-256所有的H(N)变量都是串联的而SHA-224散列值是通过最后连接时省略一些而产生的。 接下来我们说明一下SHA-224和SHA-256的计算过程。首先初始化链接变量。对于SHA-224来说初始散列值H(0)由以下8个32位的十六进制数组成 H(0)0 c1059ed8 H(0)1 367cd507 H(0)2 3070dd17 H(0)3 f70e5939 H(0)4 ffc00b31 H(0)5 68581511 H(0)6 64f98fa7 H(0)7 befa4fa4 而对于SHA-256来说初始散列值H(0)由以下8个32位的十六进制数组成。这些字由前8个质数的平方根的小数部分的钱32位组成。 H(0)0 6a09e667 H(0)1 bb67ae85 H(0)2 3c6ef372 H(0)3 a54ff53a H(0)4 510e527f H(0)5 9b05688c H(0)6 1f83d9ab H(0)7 5be0cd19 接下来我们描述一下摘要计算SHA-224和SHA-256在消息分组执行相同的处理只在初始化H(0)和如何生成最终输出的过程中有所不同。SHA-224和SHA-256可以用来散列处理长度为L位的消息其中0 L 264。算法使用一个64个32位字的消息列表 8个工作变量32位以及8个32位字的散列值。 消息列表每32位分为一个子分组被标记为W0、W1、…、W63。8个工作变量分别为a、b、c、d、e、f、g和h8个散列值被标记为h(i)0、h(i)1、…、H(i)7并保留初始散列值H(0)替换为每一个连续的中间散列值(在处理完每个消息分组后) H(i)并以最终的散列值H(N)结束在处理完所有N块后。它们还使用两个临时变量T1和T2。 从前面我们知道填充完了之后消息被分为了512位的消息分组。每个分组被分为16个32位的子分组记为M(i)0、M(i)1、...、M(i)15。将对N个消息分组进行如下操作。 a、64个消息列表的生成 从 t 0 到 15 —— Wt M(i)t 从t 16 t到 63 —— Wt SSIG1(W(t-2)) W(t-7) SSIG0(w(t-15)) W(t-16) b、初始化工作变量 a H(i-1)0 b H(i-1)1 c H(i-1)2 d H(i-1)3 e H(i-1)4 f H(i-1)5 g H(i-1)6 h H(i-1)7 c、执行散列计算 从 t 0 到 63 T1 h BSIG1(e) CH(e,f,g) Kt Wt T2 BSIG0(a) MAJ(a,b,c) h g g f f e e d T1 d c c b b a a T1 T2 d、计算中间散列值 H(i)0 a H(i-1)0 H(i)1 b H(i-1)1 H(i)2 c H(i-1)2 H(i)3 d H(i-1)3 H(i)4 e H(i-1)4 H(i)5 f H(i-1)5 H(i)6 g H(i-1)6 H(i)7 h H(i-1)7 在对所有消息分组完成上述计算之后计算最终输出。对于SHA-256是所有H(N)0、H(N)1到H(N)7的串联。对于SHA-224则是H(N)0、H(N)1直到H(N)6的串联。 5、代码实现 前面我们已经说明了SHA-256SHA-224的计算过程接下来我们将这一过程代码化。同样的首先定义一个上下文的结构。 /** 定义SHA-256哈希操作的内容信息结构体 */ typedef struct SHA256Context {uint32_tIntermediate_Hash[SHA256HashSize/4]; /* 信息摘要 */uint32_t Length_High;                         /* 按位计算的信息长度高字 */uint32_t Length_Low;                          /* 按位计算的信息长度低字 */int_least16_tMessage_Block_Index;            /* 信息分组数组的索引 */uint8_tMessage_Block[SHA256_Message_Block_Size];/* 512位信息分组 */int Computed;                                 /* 摘要计算标识 */int Corrupted;                                /* 信息摘要损坏标识 */ } SHA256Context; 接下来实现SHA256Context结构的初始化为后续的计算过程做准备。 static SHAStatusCode SHA224_256Reset(SHA256Context *context, uint32_t *H0) {if (!context) return shaNull;context-Length_High context-Length_Low 0;context-Message_Block_Index 0;context-Intermediate_Hash[0] H0[0];context-Intermediate_Hash[1] H0[1];context-Intermediate_Hash[2] H0[2];context-Intermediate_Hash[3] H0[3];context-Intermediate_Hash[4] H0[4];context-Intermediate_Hash[5] H0[5];context-Intermediate_Hash[6] H0[6];context-Intermediate_Hash[7] H0[7];context-Computed 0;context-Corrupted shaSuccess;return shaSuccess; } 接下来实现信息分组的输入这个函数接受一个字节数组作为下一个消息分组以便进行处理。 SHAStatusCode SHA256Input(SHA256Context *context, const uint8_t *message_array,unsigned intlength) {if (!context) return shaNull;if (!length) return shaSuccess;if (!message_array) return shaNull;if (context-Computed) returncontext-Corrupted shaStateError;if (context-Corrupted) returncontext-Corrupted;while (length--){context-Message_Block[context-Message_Block_Index]*message_array;if ((SHA224_256AddLength(context, 8) shaSuccess) (context-Message_Block_Index SHA256_Message_Block_Size))SHA224_256ProcessMessageBlock(context);message_array;}return context-Corrupted; } 当然还需要一个消息处理及最终摘要输出的函数这个函数将返回一个224位或者256位的信息摘要到调用者给定的Message_Digest数组。返回的信息摘要第一个元素索引为0最后一个元素索引为27SHA-2244或者31SHA-256。 static SHAStatusCode SHA224_256ResultN(SHA256Context *context,uint8_t Message_Digest[], int HashSize) {int i;if (!context) return shaNull;if (!Message_Digest) return shaNull;if (context-Corrupted) returncontext-Corrupted;if (!context-Computed)SHA224_256Finalize(context, 0x80);for (i 0; i HashSize; i)Message_Digest[i] (uint8_t)(context-Intermediate_Hash[i2] 8 * ( 3 - ( i 0x03 ) ));return shaSuccess; } 至此我们就完成了SHA-256SHA-224的编码在后续我们将对这一编码进行验证。 6、结论 上一节我们实现了SHA-256(SHA-224)的编码接下来我们来对这一实现进行验证。我们输入明文“abcd”并输出结果 同时我们对比一下其他工具生成的“abcd”的SHA-256的信息摘要结果如下 对比上述两个结果我们发现是完全一致的说明我们的编码是没有问题的。 欢迎关注
http://www.yutouwan.com/news/440824/

相关文章:

  • 内网网站建设官方网站管理办法
  • 设计免费素材网站有哪些做企业网站需要买什么资料
  • seo机构自己怎么给网站做优化排名
  • 网站运作模式网站主要内容包括什么
  • 玉田建设局网站网站吗
  • 提供模板网站制作多少钱网站建站 免费
  • 做微信投票的网站提升网站关键词排名
  • 山东网站建设开发维护标书制作软件免费版
  • 搜索网站的浏览器启博学院的功能介绍
  • 网站投稿系统怎么做中国国际进口博览会上海
  • 网站建设与维护pptwordpress中文主题模板下载
  • 网站的优化从几个方面Thinkphp网站开发实例
  • 网站建设熊掌号网站建设傲鸿
  • 青岛网站建设 青岛博采网络推广网站技巧
  • 蚂蚁网站建设陵水专业网站建设
  • rss网站推广法外贸网站 推广
  • 网站开发的技术问题一键建网站
  • 广州市品牌网站建设公司网站的三要素
  • 连锁酒店网站建设网站开发语言哪一种好些
  • 君通网站怎么样网站论坛推广文案怎么做
  • 做暖暖的视频网站西部数码网站管理助手 xp
  • 网站开发定制合同范本保定 营销型网站建设
  • 永济市做网站海门工程造价信息网
  • 18款禁用网站app直播苏州市住房和城乡建设局政务网站
  • 家用宽带做网站国内vps
  • 环保企业网站模板建设银行交易明细查询网站
  • 微信网站图片链接怎么做网站404做多大
  • 交换友情链接的网站标准是什么上海物流网站怎么建设
  • 北京网站设计精选柚v米科技wordpress 2016主题
  • 天津房地产集团网站建设支付宝服务商平台