All Projects → h2non → Jshashes

h2non / Jshashes

Licence: bsd-3-clause
Fast and dependency-free cryptographic hashing library for node.js and browsers (supports MD5, SHA1, SHA256, SHA512, RIPEMD, HMAC)

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Jshashes

Forge
A native implementation of TLS in Javascript and tools to write crypto-based and network-heavy webapps
Stars: ✭ 4,204 (+575.88%)
Mutual labels:  cryptography, sha1, hmac
Cryptoswift
CryptoSwift is a growing collection of standard and secure cryptographic algorithms implemented in Swift
Stars: ✭ 8,846 (+1322.19%)
Mutual labels:  cryptography, sha1, hmac
Hashes
Collection of cryptographic hash functions written in pure Rust
Stars: ✭ 649 (+4.34%)
Mutual labels:  cryptography, sha1
Cl Tls
An implementation of TLS and related specifications in Common Lisp
Stars: ✭ 32 (-94.86%)
Mutual labels:  cryptography, hmac
Securitydriven.inferno
✅ .NET crypto done right. Professionally audited.
Stars: ✭ 501 (-19.45%)
Mutual labels:  cryptography, hmac
Hash Library
Portable C++ hashing library
Stars: ✭ 109 (-82.48%)
Mutual labels:  sha1, hmac
Practical Cryptography For Developers Book
Practical Cryptography for Developers: Hashes, MAC, Key Derivation, DHKE, Symmetric and Asymmetric Ciphers, Public Key Cryptosystems, RSA, Elliptic Curves, ECC, secp256k1, ECDH, ECIES, Digital Signatures, ECDSA, EdDSA
Stars: ✭ 2,400 (+285.85%)
Mutual labels:  cryptography, hmac
Orion
Usable, easy and safe pure-Rust crypto
Stars: ✭ 227 (-63.5%)
Mutual labels:  cryptography, hmac
Nsec
A modern and easy-to-use cryptographic library for .NET Core based on libsodium
Stars: ✭ 217 (-65.11%)
Mutual labels:  cryptography, hmac
Jssha
A JavaScript/TypeScript implementation of the complete Secure Hash Standard (SHA) family (SHA-1, SHA-224/256/384/512, SHA3-224/256/384/512, SHAKE128/256, cSHAKE128/256, and KMAC128/256) with HMAC.
Stars: ✭ 2,089 (+235.85%)
Mutual labels:  cryptography, hmac
hmac.nim
HMAC-SHA1 and HMAC-MD5 hashing in Nim
Stars: ✭ 13 (-97.91%)
Mutual labels:  hmac, sha1
hash-wasm
Lightning fast hash functions using hand-tuned WebAssembly binaries
Stars: ✭ 382 (-38.59%)
Mutual labels:  hmac, sha1
Libsodium Php
The PHP extension for libsodium.
Stars: ✭ 507 (-18.49%)
Mutual labels:  cryptography
Lnd
Lightning Network Daemon ⚡️
Stars: ✭ 5,623 (+804.02%)
Mutual labels:  cryptography
Iotex Core
Official implementation of IoTeX blockchain protocol in Go.
Stars: ✭ 505 (-18.81%)
Mutual labels:  cryptography
Cjdns
An encrypted IPv6 network using public-key cryptography for address allocation and a distributed hash table for routing.
Stars: ✭ 4,766 (+666.24%)
Mutual labels:  cryptography
Darkwire.io
End-to-end encrypted instant web chat
Stars: ✭ 594 (-4.5%)
Mutual labels:  cryptography
Grin
Minimal implementation of the Mimblewimble protocol.
Stars: ✭ 4,897 (+687.3%)
Mutual labels:  cryptography
Cryptominisat
An advanced SAT solver
Stars: ✭ 502 (-19.29%)
Mutual labels:  cryptography
Swifty
🔑 Free Offline Password Manager
Stars: ✭ 496 (-20.26%)
Mutual labels:  cryptography

jsHashes Build Status NPM version

jshashes is lightweight library implementing the most extended cryptographic hash function algorithms in pure JavaScript (ES5 compliant).

The goal is to provide an dependency-free, fast and reliable solution for hash algorithms for both client-side and server-side JavaScript environments. The code is fully compatible with the ECMAScript 5 specification and is used in production in browsers and node.js/io.js

If you are looking for a low-level performance library for the server-side, note that node.js/io.js provides its own native module: crypto

Supported hash algorithms

Additional functionalities

Environments

  • Browsers (ES3)
  • node.js/io.js (all versions)
  • Rhino
  • RingoJS

Usage

Each algorithm has its respective own instantiable object. Here you can see an example of how to create a new instance for each one:

// new MD5 instance
var MD5 = new Hashes.MD5
// new SHA1 instance
var SHA1 = new Hashes.SHA1
// new SHA256 instance
var SHA256 =  new Hashes.SHA256
// new SHA512 instace
var SHA512 = new Hashes.SHA512
// new RIPEMD-160 instace
var RMD160 = new Hashes.RMD160

An example of how to generate an hexadecimal-based hash encoding for each algorithm:

// sample string
var str = 'Sample text!'
// output to console
console.log('MD5: ' + MD5.hex(str))
console.log('SHA1: ' + SHA1.hex(str))
console.log('SHA256: ' + SHA256.hex(str))
console.log('SHA512: ' + SHA512.hex(str))
console.log('RIPEMD-160: ' + RMD160.hex(str))

Browsers

This is a simple implementation for a client-side environment:

<html>
<head>
<script type="text/javascript" src="src/hashes.js"></script>
<script type="text/javascript">
// sample string
var str = 'This is a sample text!'
// new MD5 instance and hexadecimal string encoding
var MD5 = new Hashes.MD5().hex(str)
// output into DOM
document.write('<p>MD5: <b>' + MD5 + '</b></p>')
</script>
</head>
<body>
</body>
</html>

node.js / io.js

// require the module
var Hashes = require('jshashes')
// sample string
var str = 'This is a sample text!'
// new SHA1 instance and base64 string encoding
var SHA1 = new Hashes.SHA1().b64(str)
// output to console
console.log('SHA1: ' + SHA1)

Command-line interface

You can use the simple command-line interface to generate hashes.

$ hashes sha1-hex This is a sample string
> b6a8501d8a70e74e1dc12a6082102622fdc719bb

# or with quotes
$ hashes sha1-hex "This is a sample string"
> b6a8501d8a70e74e1dc12a6082102622fdc719bb

For more information about the options supported, type:

$ hashes -h

Installation

Via npm

$ npm install jshashes

Via Bower:

$ bower install jshashes

Via Component:

$ component install h2non/jshashes

Or loading the script directly:

http://cdn.rawgit.com/h2non/jsHashes/master/hashes.js

Public methods

Each algorithm class provides the following public methods:

  • hex(string) - Hexadecimal hash encoding from string.
  • b64(string) - Base64 hash encoding from string.
  • any(string,encoding) - Custom hash algorithm values encoding.
  • hex_hmac(key,string) - Hexadecimal hash with HMAC salt key.
  • b64_hmac(key,string) - Base64 hash with HMAC salt key.
  • any_hmac(key,string,encoding) - Custom hash values encoding with HMAC salt key support.
  • vm_test() - Simple self-test to see is working. Returns this Object.
  • setUpperCase(boolean) - Enable/disable uppercase hexadecimal returned string. Returns this Object.
  • setPad(string) - Defines a custom base64 pad string. Default is '=' according with the RFC standard. Returns this Object.
  • setUTF8(boolean) - Enable/disable UTF-8 character encoding. Returns this Object.

Hash encoding formats supported

  • Hexadecimal (most extended)
  • Base64
  • Custom hash values any() method

Benchmark

Node.js 0.6.18 running on a VPS Intel I7 930 with 512 MB of RAM (see server/benchmark.js)

Simple benchmark test generating 10000 hashes for each algorithm.
String: "A0gTtNtKh3RaduBfIo59ZdfTc5pTdOQrkxdZ5EeVOIZh1cXxqPyexKZBg6VlE1KzIz6pd6r1LLIpT5B8THRfcGvbJElwhWBi9ZAE"

* MD5
** Done in: 205 milliseconds
* SHA1
** Done in: 277 milliseconds
* SHA256
** Done in: 525 milliseconds
* SHA512
** Done in: 593 milliseconds
* RMD160
** Done in: 383 milliseconds

See client/benchmark.html for client-side.

Notes

  • Don't support checksum hash for files on the server-side, only strings-based inputs are supported.
  • It has not been planned to include support for more hash algorithms.
  • The goal is to provide the same JavaScript code in both server and client side, so it isn't planned to improve it in other ways.
  • Only Node.js server-side was tested, so with minimal changes, you can setup jsHashes in other server-side JS environment.

Changelog

  • 1.0.7
    • Merge #37: fix terminator statement token.
  • 1.0.6
    • Fix #34: options pad typo.
  • 1.0.4
    • Fix CLI script call error when use it from Bash
    • Added CLI usage example
  • 1.0.3
    • Important bugfixes to UTF-8 encoding (broken in 1.0.2) and the RIPEMD-160 hash (broken in 1.0.1). (gh #6)
    • New test suite for hashes, CRC32, and hmac; run with 'npm test' in node.
    • Fixed global variable leaks. (gh #13)
    • CRC32 will now always return positive values. (gh #11)
    • Added package version property to the exposed Hashes Object
    • Updated CLI script utility supporting all algorithms (see bin/hashes)
    • Fixed UTF-8 encoding/decoding error (if input parameter is undefined or invalid)
  • 1.0.2
    • Performance improvements and minimal refactor (length property caching, literal notation)
    • Available from Bower package manager
  • 1.0.1
    • Refactoring (hoisting, coercion, removed redundant functions, scoping, restructure...)
    • Performance improves
    • JSLint validation (except bitwise operators)
    • Now the library can be used like a AMD CommonJS module
    • Updated documentation
    • New folders structure
    • Added closure compiled and minimized library version
    • Available from Jam package manager
  • 0.1.5b
    • Added index.js for easy call the module in Node.js
    • Updated documentation
  • 0.1.4b
    • Now declaring objects using Literal Notation.
    • Solved syntax errors on minimized version (jshashes.min.js)
    • Added benchmark test and sample
  • 0.1.3b
    • Starting non-redundancy code refactorization
    • Added Helpers Object with some global functions
    • Added native support for Base64 provided as class
    • Added CRC-32 calculation support
    • Added URL encode/decode helpers functions
  • 0.1.2b
    • SHA1 error fixed.
    • General code changes (renaming classes, private methods, new methods...).
    • Changing library namespace to 'Hashes'.
    • Starting code documentation.
    • Added new examples of how to use.
  • 0.1.1b
    • Minimal library improvements.
    • There has been added some samples, like how to use it and support for NPM package.
  • 0.1.0b
    • First release: the code is stable, but the library is still beta and must be improved and documented.

TODO

  • Performance benchmarking

Authors

Library author

Original algorithm authors

Other contributors

License

jsHashes is released under New BSD license. See LICENSE file.

Issues

Feel free to report any issue you experiment via Github https://github.com/h2non/jsHashes/issues.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].