Author

Topic: What is Hash SHA256? (Read 265 times)

jr. member
Activity: 78
Merit: 1
FUTURE OF SECURITY TOKENS
October 12, 2018, 04:31:02 AM
#8
I got your point, im sorry for being rude to you i didn't mean it.
Maybe, I thought that you're one of the high ranks here that answering or post a reply through the sarcastic way in fact you helping me. I am wrong, i apologized.

Quote
For example, if I ask you anything out of the box related to this SHA-256, will you be able to answer?
Yes, please tell me  Smiley i want also to know if I've improved.

Thanks
legendary
Activity: 3052
Merit: 1273
October 12, 2018, 04:08:13 AM
#7
@stedsm first of all, I want to thank you for appreciating me.

I created this post to all people who don't have much time to research on google that's why I posted here. Yes I didn't add anything here, because I want people to understand clearly this post whats all about. If I add something maybe they don't understand.(Because I have some issue on my grammar)

Is it just due to Grammatical issues or that you yourself aren't aware of this HASH thing and posted just to add one more post to your portfolio? You tried to play wise, but did you do it right? No. And yes, nobody in this busy world is too lazy to visit https://www.google.com or even open Google's search app and ask for the same if they aren't aware of what is HASH. It takes not even a whole second in order for Google to show the exact results, one of which you've demonstrated here.


Quote
Quote
Everyone here is, else what's the reason for you to post it?
Didn't you post this to earn some merits?  Roll Eyes
This is not all about the merits. I know majority for all people want to earn merits.
But, that is not my reason for posting this. I came here because I want to learn and to share knowledge as well. Not for merit.

Sounds rude, I didn't meant it. I apologized.

Not trying to be rude here dude, I've tried to put the facts in front of you and there's nothing wrong in sharing anything here, it's just that you should actually know what you're posting about. For example, if I ask you anything out of the box related to this SHA-256, will you be able to answer?
jr. member
Activity: 78
Merit: 1
FUTURE OF SECURITY TOKENS
October 12, 2018, 03:23:16 AM
#6
@stedsm first of all, I want to thank you for appreciating me.

I created this post to all people who don't have much time to research on google that's why I posted here. Yes I didn't add anything here, because I want people to understand clearly this post whats all about. If I add something maybe they don't understand.(Because I have some issue on my grammar)

Quote
Everyone here is, else what's the reason for you to post it?
Didn't you post this to earn some merits?  Roll Eyes
This is not all about the merits. I know majority for all people want to earn merits.
But, that is not my reason for posting this. I came here because I want to learn and to share knowledge as well. Not for merit.

Sounds rude, I didn't meant it. I apologized.

legendary
Activity: 3052
Merit: 1273
October 12, 2018, 02:18:52 AM
#5
Guys, he has copied and pasted only with any link- https://bitcoinexchangeguide.com/bitcoin-hash-functions/
And,
33. Posting plagiarized content is not allowed.
Yes I copied and paste here. but, I  think you didn't read my post.
I have a source code to this post. This is not a plagiarism.
Quote
The link that I provide as a source, block by the forum.

You may have used the Code function itself to post those links because the links which seem to be suspicious to the forum are hereby deleted without any notice.

I appreciate that you tried to say something here, but on another note, what's the meaning of posting the content that's already available over the internet and can be easily found once Googled? This may/may not be considered plagiarism based on many factors but it's not really needed as you didn't add anything extra to it in your own words and didn't try to describe it in your way.

Quote
Ps: Are you hungry for merit???

Everyone here is, else what's the reason for you to post it?
Didn't you post this to earn some merits?  Roll Eyes
jr. member
Activity: 78
Merit: 1
FUTURE OF SECURITY TOKENS
October 12, 2018, 01:57:20 AM
#4
Guys, he has copied and pasted only with any link- https://bitcoinexchangeguide.com/bitcoin-hash-functions/
And,
33. Posting plagiarized content is not allowed.
Yes I copied and paste here. but, I  think you didn't read my post.
I have a source code to this post. This is not a plagiarism.
Quote
The link that I provide as a source, block by the forum.

Ps: Are you hungry for merit???
sr. member
Activity: 308
Merit: 280
October 12, 2018, 01:42:41 AM
#3
Guys, he has copied and pasted only with any link- https://bitcoinexchangeguide.com/bitcoin-hash-functions/
And,
33. Posting plagiarized content is not allowed.
full member
Activity: 532
Merit: 148
October 12, 2018, 12:02:20 AM
#2
SHA-256 is part of the SHA-2 cryptographic hash functions. This is designed by the National Security Agency (NSA)  and SHA stands for Secure Hash Algorithm.
SHA-256 can be used in Mining and creation of bitcoin addresses.
It is used in mining as the proof of work algorithms and SHA-256 is also used on creating bitcoin addresses to improve its privacy and security.
jr. member
Activity: 78
Merit: 1
FUTURE OF SECURITY TOKENS
October 10, 2018, 06:59:18 AM
#1
What is the importance of hash?

Hash is very important to bitcoin because a hash function takes input data and forms a complex mathematical operation on it, resulting in a fixed-size output data. The size of the input data (also called message or string) is meaningless. What’s important to know is that the output data (also called digest) is always a fixed length.

If you don't understand what is this hash, this is the example.
every time you create a user account on a website, your password serves as the input of a hash function. Every time you visit that website and enter your password, a fast function is performed on your password. As long as the password matches the stored output, you can proceed to your account.

Hash functions have been used in computational processes for a long time, whether you realize it or not. Cryptographic hash functions are used for several security applications, such as message authentication codes (MACs), e-commerce protocols, and digital signatures.

Code:
.                                                Plain text
⬇️
Code:
.                                            (#) Hash function
⬇️
Code:
.                                       (#b!c1d&"(#df#!sk84#) Hash text

(Sorry for using code, I can't use images because I'm a newbie so this is my vise versa  Grin)

Bitcoin hashing properties
The following are important properties that a cryptography-viable hash function needs to function properly:

Efficiency
A cryptographic hash function shouldn’t take a long time to get from input to output.

Collision Resistance
It’s vital that two different inputs don’t have the same hash output; this is imperative to digital safety. While mathematically this is possible, it’s best if the odds are astronomically long for two different inputs to end up with the same output. In the event two distinct inputs have the same output, it’s referred to as a cryptographic hash collision, making it imperative for a hash to have a strong collision resistance. Otherwise, the algorithm will be vulnerable to collision attacks, which threatens security.

Theymos
⬇️
Code:
.                                            10001011100010000110
↙️↘️
                                       
The pharmacist         Jet cash
Double-spending problem: if theymos sends money in digital format to The pharmacist, the pharmacist cannot know if theymos has deleted his copy of the file and he can choose to send the same file to jet cash.

Pre-image Resistance
Under ideal circumstances, it’s ideal that an input can’t be found based on the hash output. Any given input should have just one set hash output. If this resistance is absent in a function, it will likely be vulnerable to preimage attacks.

Second preimage resistance
It should also be difficult to find a second input on the off chance that input shares an output with another input. Functions that can’t resist this are vulnerable to second pre-image attacks.

Privacy
It’s vital for a hash function to hide input information. It should not be easy, or even possible, to learn information about the input merely by looking at the output.

Randomness
The final output of a hash function should be randomly distributed. Ideally, it would look akin to a series of coin flips so that a malicious player cannot find a pattern that could lead him or her to the original input.

Proof Of Work (Pow)
A proof-of-work system is intended to deter service abuses like span or the denial of service on networks that require a service requester.
- Cryptocurrency miners tend to use computational work to solve a string of numbers that start with multiple zeros, which is commonly called a challenge string. More zeros mean the mining process will be more difficult. A miner can “solve” a string by locating the response or proof string.

Note; that hash functions are not appropriate for storing encrypted passwords, as they are designed to be fast to compute, and hence would be candidates for brute-force attacks. Key derivation functions such as bcrypt or scrypt are designed to be slow to compute, and are more appropriate for password storage (npm has bcrypt and scrypt libraries, and PHP has a bcrypt implementation with password_hash).

There's a various “cryptographic hash algorithms” like DSA, SHA-1, SHA 256, MD5, BLAKE, and RIPEMD.
But the compatible hash for bitcoin is HASH SHA256,
SHA-256 is one of the successor hash functions to SHA-1 (collectively referred to as SHA-2), and is one of the strongest hash functions available. SHA-256 is not much more complex to code than SHA-1, and has not yet been compromised in any way. The 256-bit key makes it a good partner-function for AES. It is defined in the NIST (National Institute of Standards and Technology) standard ‘FIPS 180-4’. NIST also provide a number of test vectors to verify correctness of implementation.

In this JavaScript implementation, the script as clear and concise as possible, and equally as close as possible to the NIST specification, to make the operation of the script readily understandable.
Code:
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
/* SHA-256 (FIPS 180-4) implementation in JavaScript                  (c) Chris Veness 2002-2017  */
/*                                                                                   MIT Licence  */
/* www.movable-type.co.uk/scripts/sha256.html                                                     */
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */

'use strict';


/**
 * SHA-256 hash function reference implementation.
 *
 * This is an annotated direct implementation of FIPS 180-4, without any optimisations. It is
 * intended to aid understanding of the algorithm rather than for production use.
 *
 * While it could be used where performance is not critical, I would recommend using the ‘Web
 * Cryptography API’ (developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest) for the browser,
 * or the ‘crypto’ library (nodejs.org/api/crypto.html#crypto_class_hash) in Node.js.
 *
 * See csrc.nist.gov/groups/ST/toolkit/secure_hashing.html
 *     csrc.nist.gov/groups/ST/toolkit/examples.html
 */
class Sha256 {

    /**
     * Generates SHA-256 hash of string.
     *
     * @param   {string} msg - (Unicode) string to be hashed.
     * @param   {Object} [options]
     * @param   {string} [options.msgFormat=string] - Message format: 'string' for JavaScript string
     *   (gets converted to UTF-8 for hashing); 'hex-bytes' for string of hex bytes ('616263' ≡ 'abc') .
     * @param   {string} [options.outFormat=hex] - Output format: 'hex' for string of contiguous
     *   hex bytes; 'hex-w' for grouping hex bytes into groups of (4 byte / 8 character) words.
     * @returns {string} Hash of msg as hex character string.
     */
    static hash(msg, options) {
        const defaults = { msgFormat: 'string', outFormat: 'hex' };
        const opt = Object.assign(defaults, options);

        // note use throughout this routine of 'n >>> 0' to coerce Number 'n' to unsigned 32-bit integer

        switch (opt.msgFormat) {
            default: // default is to convert string to UTF-8, as SHA only deals with byte-streams
            case 'string':   msg = utf8Encode(msg);       break;
            case 'hex-bytes':msg = hexBytesToString(msg); break; // mostly for running tests
        }

        // constants [§4.2.2]
        const K = [
            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 ];

        // initial hash value [§5.3.3]
        const H = [
            0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];

        // PREPROCESSING [§6.2.1]

        msg += String.fromCharCode(0x80);  // add trailing '1' bit (+ 0's padding) to string [§5.1.1]

        // convert string msg into 512-bit blocks (array of 16 32-bit integers) [§5.2.1]
        const l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length
        const N = Math.ceil(l/16);  // number of 16-integer (512-bit) blocks required to hold 'l' ints
        const M = new Array(N);     // message M is N×16 array of 32-bit integers

        for (let i=0; i            M[i] = new Array(16);
            for (let j=0; j<16; j++) { // encode 4 chars per integer (64 per block), big-endian encoding
                M[i][j] = (msg.charCodeAt(i*64+j*4+0)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16)
                        | (msg.charCodeAt(i*64+j*4+2)<< 8) | (msg.charCodeAt(i*64+j*4+3)<< 0);
            } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0
        }
        // add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]
        // note: most significant word would be (len-1)*8 >>> 32, but since JS converts
        // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators
        const lenHi = ((msg.length-1)*8) / Math.pow(2, 32);
        const lenLo = ((msg.length-1)*8) >>> 0;
        M[N-1][14] = Math.floor(lenHi);
        M[N-1][15] = lenLo;


        // HASH COMPUTATION [§6.2.2]

        for (let i=0; i            const W = new Array(64);

            // 1 - prepare message schedule 'W'
            for (let t=0;  t<16; t++) W[t] = M[i][t];
            for (let t=16; t<64; t++) {
                W[t] = (Sha256.σ1(W[t-2]) + W[t-7] + Sha256.σ0(W[t-15]) + W[t-16]) >>> 0;
            }

            // 2 - initialise working variables a, b, c, d, e, f, g, h with previous hash value
            let a = H[0], b = H[1], c = H[2], d = H[3], e = H[4], f = H[5], g = H[6], h = H[7];

            // 3 - main loop (note '>>> 0' for 'addition modulo 2^32')
            for (let t=0; t<64; t++) {
                const T1 = h + Sha256.Σ1(e) + Sha256.Ch(e, f, g) + K[t] + W[t];
                const T2 =     Sha256.Σ0(a) + Sha256.Maj(a, b, c);
                h = g;
                g = f;
                f = e;
                e = (d + T1) >>> 0;
                d = c;
                c = b;
                b = a;
                a = (T1 + T2) >>> 0;
            }

            // 4 - compute the new intermediate hash value (note '>>> 0' for 'addition modulo 2^32')
            H[0] = (H[0]+a) >>> 0;
            H[1] = (H[1]+b) >>> 0;
            H[2] = (H[2]+c) >>> 0;
            H[3] = (H[3]+d) >>> 0;
            H[4] = (H[4]+e) >>> 0;
            H[5] = (H[5]+f) >>> 0;
            H[6] = (H[6]+g) >>> 0;
            H[7] = (H[7]+h) >>> 0;
        }

        // convert H0..H7 to hex strings (with leading zeros)
        for (let h=0; h
        // concatenate H0..H7, with separator if required
        const separator = opt.outFormat=='hex-w' ? ' ' : '';

        return H.join(separator);

        /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */

        function utf8Encode(str) {
            try {
                return new TextEncoder().encode(str, 'utf-8').reduce((prev, curr) => prev + String.fromCharCode(curr), '');
            } catch (e) { // no TextEncoder available?
                return unescape(encodeURIComponent(str)); // monsur.hossa.in/2012/07/20/utf-8-in-javascript.html
            }
        }

        function hexBytesToString(hexStr) { // convert string of hex numbers to a string of chars (eg '616263' -> 'abc').
            const str = hexStr.replace(' ', ''); // allow space-separated groups
            return str=='' ? '' : str.match(/.{2}/g).map(byte => String.fromCharCode(parseInt(byte, 16))).join('');
        }
    }



    /**
     * Rotates right (circular right shift) value x by n positions [§3.2.4].
     * @private
     */
    static ROTR(n, x) {
        return (x >>> n) | (x << (32-n));
    }


    /**
     * Logical functions [§4.1.2].
     * @private
     */
    static Σ0(x) { return Sha256.ROTR(2,  x) ^ Sha256.ROTR(13, x) ^ Sha256.ROTR(22, x); }
    static Σ1(x) { return Sha256.ROTR(6,  x) ^ Sha256.ROTR(11, x) ^ Sha256.ROTR(25, x); }
    static σ0(x) { return Sha256.ROTR(7,  x) ^ Sha256.ROTR(18, x) ^ (x>>>3);  }
    static σ1(x) { return Sha256.ROTR(17, x) ^ Sha256.ROTR(19, x) ^ (x>>>10); }
    static Ch(x, y, z)  { return (x & y) ^ (~x & z); }          // 'choice'
    static Maj(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); } // 'majority'

}


/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */

if (typeof module != 'undefined' && module.exports) module.exports = Sha256; // ≡ export default Sha256

Note; that these scripts are intended to assist in studying the algorithms, not for production use. For production use, check this:(for web cryptography API ) https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
(And here for crypto library nodes) https://nodejs.org/api/crypto.html#crypto_class_hash
Source; https://www.[Suspicious link removed] ( https://bitcoinexchangeguide.com/bitcoin-hash-functions/ )
https://www.movable-type.co.uk/scripts/sha256.html#src-code

Ps:all names I provided to this post is my inspiration before I create this, that's why I put their names.
Jump to: