Testing

Hashing

For MD5, we can test for "Hello":

Type:       MD5
Message:    Hello
Hex:    8b1a9953c4611296a827abf8c47804d7
Base64: ixqZU8RhEpaoJ6v4xHgE1w==

If we test with Openssl:

echo -n Hello | openssl md5
8b1a9953c4611296a827abf8c47804d7

For SHA-1:

Type:       SHA1
Message:    Hello
Hex:    f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0
Base64: 9/+ei3uy4Jtwk1pdeF4MxdnQq/A=

With OpenSSL we get:

echo -n Hello | openssl sha1
f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0

For 256-bit SHA-2:

Type:       SHA256
Message:    Hello
Hex:    185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Base64: GF+NsyJx/iX1Yab8k4suJkMG7DBO2lGAB9F2SCY4GWk=

And with OpenSSL we get:

echo -n Hello | openssl sha256
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

For RIPEMD160:

Type:       RIPEM160
Message:    Hello
Hex:    d44426aca8ae0a69cdbc4021c64fa5ad68ca32fe
Base64: 1EQmrKiuCmnNvEAhxk+lrWjKMv4=

And with OpenSSL:

echo -n Hello | openssl sha1 -ripemd160
d44426aca8ae0a69cdbc4021c64fa5ad68ca32fe

Block encryption

A sample run for AES CBC gives:

Type:      AES (CBC)
Message:    Hello
Password:   qwerty
Salt:       241fa86763b85341
IV:     6be952ebc17eed10411eaa9892f19124
Key:        33a5820536f9eeb709d88af3b40fdbb100c04327c71b5accf48424c8eb40c3f9
Encrypted:  U2FsdGVkX18kH6hnY7hTQZAGxV2faF01w6uhO+X6+9Q=
Decrypted:  Hello

We can test our outputs with Openssl. In this case the word "Hello" is used with a password of "qwerty", along with the IV and salt value:

echo -n Hello | openssl enc -aes-256-cbc  -pass pass:"qwerty" -e -base64 -S 241fa86763b85341
U2FsdGVkX18kH6hnY7hTQZAGxV2faF01w6uhO+X6+9Q=

If we save the cipher to a file (in.txt), we can then decrypt it with:

openssl enc -aes-256-cbc  -pass pass:"qwerty" -d -base64 -S 241fa86763b85341 -in enc.txt -out out.txt

For DES we get:

Type:       DES
Message:    Hello
Password:   qwerty
Salt:       b99d7b9a5fc533d2
IV:     6181c17bd65c22e7
Encrypted:  U2FsdGVkX1+5nXuaX8Uz0sy7jQgKtewQ
Decrypted:  48656c6c6f

We can check this with:

echo -n Hello | openssl enc -des  -pass pass:"qwerty" -e -base64 -S b99d7b9a5fc533d2
U2FsdGVkX1+5nXuaX8Uz0sy7jQgKtewQ

HMAC

For HMAC-MD5 we get:

Type:       HMAC-MD5
Message:    Hello
Password:   qwerty
Hex:    7f43007a026d9696566dc8c7bb2172e4
Base64: f0MAegJtlpZWbcjHuyFy5A==

If we try OpenSSL we get:

echo -n Hello | openssl md5 -hmac qwerty
7f43007a026d9696566dc8c7bb2172e4

For HMAC-SHA1:

Type:       HMAC-SHA1
Message:    Hello
Password:   qwerty
Hex:    8c7cd4cb162bc91e4ee4573aba50ca00474e7c5d
Base64: jHzUyxYryR5O5Fc6ulDKAEdOfF0=

And for OpenSSL:

echo -n Hello | openssl sha1 -hmac qwerty
8c7cd4cb162bc91e4ee4573aba50ca00474e7c5d

For HMAC, we can test with Node.js:

var crypto = require('crypto');

var key = 'qwerty';
var message = 'Hello';

var hash = crypto.createHmac('md5', key).update(message);

// to lowercase hexits
console.log(hash.digest('hex'));

// to base64
console.log(hash.digest('base64'));

And run with:

$ node h.js
7f43007a026d9696566dc8c7bb2172e4

Stream encryption

And for ChaCha20:

Type:      ChaCha20
Input:      Hello
Password:   qwerty
Key seed: 65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5
 (based on SHA-256 of qwerty)
Key stream: 8b084a9003 (based on length of Hello)
Text stream:    48656c6c6f
Output stream:  c36d26fc6c

And for Poly1305:

Type       Poly1305
Input:      Cryptographic Forum Research Group
Input (Hex):    85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b
Password (Hex): 43727970746f6772617068696320466f72756d2052657365617263682047726f7570
Tag:        a8061dc1305136c6c22b8baf0c0127a9

And for RSA we get a key pair of:

Key generated in 74 ms
Private key:
-----BEGIN RSA PRIVATE KEY-----
MI ... KR3EXTfywjS6hAjyZCPj4Hi
-----END RSA PRIVATE KEY-----
Public key:
-----BEGIN PUBLIC KEY-----
MI ... sBYUeVJYhMU9gcwX
-----END PUBLIC KEY-----

And a message of:

Encrypt/decrypt in 7 ms
Text:   Hello
Encrypt with public key:    uSYrZ6rYpViDlW3n6...w6Z231=
Decrypt with private key:   Hello