The SubtleCrypto.digest()
method returns a Promise
of a digest generated from the hash function and text given as parameters.
Note: Older insecure hash functions, like MD5
, are not supported by this method. Even a supported method, SHA-1
, is considered weak and should be avoided, at least in any new project.
SyntaxEdit
var hash = crypto.subtle.digest(algo, buffer)
;
Parameters
algo
is aDOMString
defining the hash function to use. Supported values are:SHA-1
,SHA-256
,SHA-384
, andSHA-512
.buffer
is aArrayBuffer
or anArrayBufferView
containing the data to be hashed using the hashing algorithm.
Return value
hash
is aPromise
that returns the hash on success.
ExampleEdit
Here's an example that computes the sha256 of a string and display its hex digest.
function sha256(str) {
// We transform the string into an arraybuffer.
var buffer = new TextEncoder("utf-8").encode(str);
return crypto.subtle.digest("SHA-256", buffer).then(function (hash) {
return hex(hash);
});
}
function hex(buffer) {
var hexCodes = [];
var view = new DataView(buffer);
for (var i = 0; i < view.byteLength; i += 4) {
// Using getUint32 reduces the number of iterations needed (we process 4 bytes each time)
var value = view.getUint32(i)
// toString(16) will give the hex representation of the number without padding
var stringValue = value.toString(16)
// We use concatenation and slice for padding
var padding = '00000000'
var paddedValue = (padding + stringValue).slice(-padding.length)
hexCodes.push(paddedValue);
}
// Join all the hex strings into one
return hexCodes.join("");
}
sha256("foobar").then(function(digest) {
console.log(digest);
}); // outputs "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2"
SpecificationsEdit
Specification | Status | Comment |
---|---|---|
Web Cryptography API The definition of 'SubtleCrypto.digest()' in that specification. |
Candidate Recommendation | Initial definition. |
Browser compatibilityEdit
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support (SHA-1 and SHA-2 algorithms) |
37 | 34 (34) | Not supported | ? | Not supported |
See alsoEdit
Crypto
andCrypto.subtle
.SubtleCrypto
, the interface it belongs to.