sha256
/* * A JavaScript implementation of the SHA256 hash function. * * FILE: sha256.js * VERSION: 0.8 * AUTHOR: Christoph Bichlmeier <informatik@zombiearena.de> * * NOTE: This version is not tested thoroughly! * * Copyright (c) 2003, Christoph Bichlmeier * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holder nor the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * ====================================================================== * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* SHA256 logical functions */ function rotateRight(n,x) { return ((x >>> n) | (x << (32 - n))); } function choice(x,y,z) { return ((x & y) ^ (~x & z)); } function majority(x,y,z) { return ((x & y) ^ (x & z) ^ (y & z)); } function sha256_Sigma0(x) { return (rotateRight(2, x) ^ rotateRight(13, x) ^ rotateRight(22, x)); } function sha256_Sigma1(x) { return (rotateRight(6, x) ^ rotateRight(11, x) ^ rotateRight(25, x)); } function sha256_sigma0(x) { return (rotateRight(7, x) ^ rotateRight(18, x) ^ (x >>> 3)); } function sha256_sigma1(x) { return (rotateRight(17, x) ^ rotateRight(19, x) ^ (x >>> 10)); } function sha256_expand(W, j) { return (W[j&0x0f] += sha256_sigma1(W[(j+14)&0x0f]) + W[(j+9)&0x0f] + sha256_sigma0(W[(j+1)&0x0f])); } /* Hash constant words K: */ var K256 = new Array( 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ); /* global arrays */ var ihash, count, buffer; var sha256_hex_digits = "0123456789abcdef"; /* Add 32-bit integers with 16-bit operations (bug in some JS-interpreters: overflow) */ function safe_add(x, y) { var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xffff); } /* Initialise the SHA256 computation */ function sha256_init() { ihash = new Array(8); count = new Array(2); buffer = new Array(64); count[0] = count[1] = 0; ihash[0] = 0x6a09e667; ihash[1] = 0xbb67ae85; ihash[2] = 0x3c6ef372; ihash[3] = 0xa54ff53a; ihash[4] = 0x510e527f; ihash[5] = 0x9b05688c; ihash[6] = 0x1f83d9ab; ihash[7] = 0x5be0cd19; } /* Transform a 512-bit message block */ function sha256_transform() { var a, b, c, d, e, f, g, h, T1, T2; var W = new Array(16); /* Initialize registers with the previous intermediate value */ a = ihash[0]; b = ihash[1]; c = ihash[2]; d = ihash[3]; e = ihash[4]; f = ihash[5]; g = ihash[6]; h = ihash[7]; /* make 32-bit words */ for(var i=0; i<16; i++) W[i] = ((buffer[(i<<2)+3]) | (buffer[(i<<2)+2] << 8) | (buffer[(i<<2)+1] << 16) | (buffer[i<<2] << 24)); for(var j=0; j<64; j++) { T1 = h + sha256_Sigma1(e) + choice(e, f, g) + K256[j]; if(j < 16) T1 += W[j]; else T1 += sha256_expand(W, j); T2 = sha256_Sigma0(a) + majority(a, b, c); h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); } /* Compute the current intermediate hash value */ ihash[0] += a; ihash[1] += b; ihash[2] += c; ihash[3] += d; ihash[4] += e; ihash[5] += f; ihash[6] += g; ihash[7] += h; } /* Read the next chunk of data and update the SHA256 computation */ function sha256_update(data, inputLen) { var i, index, curpos = 0; /* Compute number of bytes mod 64 */ index = ((count[0] >> 3) & 0x3f); var remainder = (inputLen & 0x3f); /* Update number of bits */ if ((count[0] += (inputLen << 3)) < (inputLen << 3)) count[1]++; count[1] += (inputLen >> 29); /* Transform as many times as possible */ for(i=0; i+63<inputLen; i+=64) { for(var j=index; j<64; j++) buffer[j] = data.charCodeAt(curpos++); sha256_transform(); index = 0; } /* Buffer remaining input */ for(var j=0; j<remainder; j++) buffer[j] = data.charCodeAt(curpos++); } /* Finish the computation by operations such as padding */ function sha256_final() { var index = ((count[0] >> 3) & 0x3f); buffer[index++] = 0x80; if(index <= 56) { for(var i=index; i<56; i++) buffer[i] = 0; } else { for(var i=index; i<64; i++) buffer[i] = 0; sha256_transform(); for(var i=0; i<56; i++) buffer[i] = 0; } buffer[56] = (count[1] >>> 24) & 0xff; buffer[57] = (count[1] >>> 16) & 0xff; buffer[58] = (count[1] >>> 8) & 0xff; buffer[59] = count[1] & 0xff; buffer[60] = (count[0] >>> 24) & 0xff; buffer[61] = (count[0] >>> 16) & 0xff; buffer[62] = (count[0] >>> 8) & 0xff; buffer[63] = count[0] & 0xff; sha256_transform(); } /* Split the internal hash values into an array of bytes */ function sha256_encode_bytes() { var j=0; var output = new Array(32); for(var i=0; i<8; i++) { output[j++] = ((ihash[i] >>> 24) & 0xff); output[j++] = ((ihash[i] >>> 16) & 0xff); output[j++] = ((ihash[i] >>> 8) & 0xff); output[j++] = (ihash[i] & 0xff); } return output; } /* Get the internal hash as a hex string */ function sha256_encode_hex() { var output = new String(); for(var i=0; i<8; i++) { for(var j=28; j>=0; j-=4) output += sha256_hex_digits.charAt((ihash[i] >>> j) & 0x0f); } return output; } /* Main function: returns a hex string representing the SHA256 value of the given data */ function sha256_digest(data) { sha256_init(); sha256_update(data, data.length); sha256_final(); return sha256_encode_hex(); } /* test if the JS-interpreter is working properly */ function sha256_self_test() { return sha256_digest("message digest") == "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650"; }
相关推荐
无需将消息一次读入内存,通过循环调用sha256_update1即可计算摘要值,摘要值最后存储在hash[32]中;可以利用SHA256在线工具验证; sha256_init(&ctx;); sha256_update1(&ctx;, message1, 64); sha256_update1(&ctx;...
sha256 GitHub源代码,头文件未被添加进去
void sha256_get(uint8_t hash[32], const uint8_t *message, int length);/*此函数用于对消息计算摘要值,输入任意大小消息,输出32字节摘要值*/ void hmac_sha256_get(uint8_t digest[32], uint8_t *message, int...
SHA256 和 HMAC-SHA256 的C语言实现,只有一个文件,无库依赖。使用方法见源码底部注释说明
用java原生的摘要实现SHA256加密
通过Delphi XE 封装的SHA256加密签名的DLL,并提供DLL的调用demo
sha256_Hmac加密; sha256_Hmac解密;
sha256算法,能实现sha256的加密功能,希望大家喜欢
SHA256校验的小工具 可以检查文件是否改动
SHA256 哈希密码算法C语言实现 亲测好用。只要SHA256的实现。
sha256加密,文件中包含sha256.js、sha256.java、包含jar包。工具类、调用方法。
SHA256加密
js使用sha256加密字符串生成签名使用,调用sha256_digest(str)方法即可
MD5 SHA1 SHA256 签名信息 点击签名信息可复制到剪切板, GitHub:https://github.com/sunan-n/GetAppInfo 如下图: ```java 主要就是这个方法,传参数进来获取相应的签名类型 信息 public static String ...
亲测可要使用 * Filename: sha256.c * Author: Brad Conte (brad AT bradconte.com) * Copyright: * Disclaimer: This code is presented "as is" without any guarantees.
sha256不含盐值 sha256含盐值 sha256含盐值的校验 生成秘钥 加密AES128 解密AES128
SHA256算法的verilog实现 IPCore 自动生成的FIFO和ROM
VB6.0语言,SHA256哈希算法源码,做成函数,可以直接调用!! 区别于之前上传的“SHA256哈希算法VB源码”: “SHA256哈希算法VB源码”使用的是sha256算法详细规则计算的,较长; 本函数是直接调用SHA256的类算法,较...
对sha256在openssl库中调用和组装生成可以执行的基于openssl库的sha256模块,可供之后的生日攻击和长度扩展攻击等使用该模块。 可以运行test.cpp对该模块的散列加密功能进行简单测试。 运行指导 将源码clone到...
Delphi2007下使用SHA256的Demo源代码,在D2007下编译通过。 引用uSHA256.pas单元 DelphiXE引用IdHashSHA, IdSSLOpenSSLHeaders后通过调用FSHA256.HashStringAsHex(fStr)即可