3.0.0 • Published 3 years ago

@ashiteam/ashi-aes v3.0.0

Weekly downloads
10
License
ISC
Repository
bitbucket
Last release
3 years ago

AshiTEAM AES

Helper classes for my use to encrypt/decrypt binary data and string data using a password.

Installing

Install using npm

npm i @ashiteam/ashi-aes --save

The password to use for encryption/decryption can be passed in the constructor or as an optional parameter to the encrypt/decrypt functions.

To use, first import, create a variable and use as follows

import AshiAesEncrypt from '@ashiteam/ashi-aes-encrypt';
import AshiAesDecrypt from '@ashiteam/ashi-aes-decrypt';

const aesEnc = new AshiAesEncrypt(somePasswordString);
const aesDec = new AshiAesDecrypt(somePasswordString);
const data = 'This is a test string to encrypt. This is a test string to encrypt. This is a test string to encrypt. This is a test string to encrypt';
const encData = await aesEnc.encryptTextAsync(data);
const decData = await aesDec.decryptTextAsync(encData);

console.log(encData);
console.log(data);
console.log(decData);
console.log(decData == data ? 'All good' : 'ERROR');

To encrypt binarry data, use the encryptDataAsync & decryptDataAsync functions. You can pass in a Buffer and get back a Buffer to and from these functions.

const encBinaryData = aesEnc.encryptDataAsync(binaryData);
const decBinaryData = aesDec.decryptDataAsync(encBinaryData);

To pass the password to the functions, do as follows

import AshiAesEncrypt from '@ashiteam/ashi-aes-encrypt';
import AshiAesDecrypt from '@ashiteam/ashi-aes-decrypt';

const aesEnc = new AshiAesEncrypt('');
const aesDec = new AshiAesDecrypt('');

const encData = await aesEnc.encryptTextAsync(data, somePasswordString);
const decData = await aesDec.decryptTextAsync(encData, somePasswordString);

Some Implementation Details

The key used for encryption/decryption is a 256 bit key generated using pbkdf2 using a random salt of 16 bytes long using 100 iterations. The 100 iterations is the default, this however can be changed to a different value by setting the iterations property.

When encrypting:

  • The random salt is stored as the firs 16 bytes of the output.
  • A randome iv of 16 bytes is generated and used and stored as the second 16 bytes of the output.
  • The encrypted data is stored starting from the 32nd byte

When decrypting:

  • The salt from the first 16 bytes are used to generate the key
  • The second 16 bytes are used as the initial vector (iv)

Note

Data encrypted using other tools or languages (such as Java, C#, ...) can be decrypted by this code (and vice versa) provided the salt & iv are stored as the first 32 bytes, and the key is generated as mentiond above.

Authors

  • Asanga Weerapura - All work

License

This project is licensed under the ISC License.

Acknowledgments

  • node-forge
  • buffer
2.1.2

3 years ago

3.0.0

3 years ago

2.1.0

3 years ago

2.0.2

3 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.0.32

4 years ago

1.0.31

4 years ago

1.0.30

4 years ago

1.0.29

4 years ago

1.0.28

4 years ago

1.0.27

4 years ago

1.0.26

4 years ago

1.0.25

4 years ago

1.0.24

4 years ago

1.0.23

4 years ago

1.0.22

5 years ago

1.0.21

5 years ago

1.0.20

5 years ago

1.0.19

5 years ago

1.0.18

5 years ago

1.0.17

5 years ago

1.0.16

5 years ago

1.0.15

5 years ago

1.0.14

5 years ago

1.0.13

5 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago