Encrypt and decrypt a string using another string (or an
Uint8Array
) as password
- Simple to use, hard to misuse
- Does not reinvent the wheel (based on encrypt-uint8array which in turn is based on Themis)
- Written in TypeScript (you get autocomplete suggestions in your IDE!)
- The obtained encrypted string is always printable (uses only printable ASCII characters)
- For large strings, the encrypted string length is only about 25% larger than the original string
$ npm install encrypt-string
const { encryptString, decryptString } = require('encrypt-string');
(async () => {
const secret = 'This is the secret';
const password = 'P4s$w0Rd!';
const encrypted = await encryptString(secret, password);
console.log(encrypted);
//=> !!(AP#M4i]$9<c0,iw4;%a4/C%*@EB0jp'+$$pww]yLPd3[G'2/eS`@_u/[@.dfF#$9]Xl2:o:@FkoOA'@jq}=`f$W!>gbX1L678@ghM`.=7V(K:db]M5i{u5[ga~CojWx'M_e7;#~lD-aVDs-D_o)+e16d:-`Dz!bVJ3
const decrypted = await decryptString(encrypted, password);
console.log(decrypted);
//=> 'This is the secret'
await decryptString(encrypted, 'wrong-password');
//=> DecryptionError: Unable to decrypt - password is incorrect or data is corrupted.
})();
Note: it seems Themis uses some cryptographically secure random bytes in the encryption process, therefore the encryption result is different on each run, even for the same secret and same password. If you run the example above, you will probably get a different encrypted string.
Don't worry, all of them are valid and all of them can be decrypted successfully. You can see this by decrypting the output I received directly:
const { decryptString } = require('encrypt-string');
(async () => {
const encrypted = '!!(AP#M4i]$9<c0,iw4;%a4/C%*@EB0jp\'+$$pww]yLPd3[G\'2/eS`@_u/[@.dfF#$9]Xl2:o:@FkoOA\'@jq}=`f$W!>gbX1L678@ghM`.=7V(K:db]M5i{u5[ga~CojWx\'M_e7;#~lD-aVDs-D_o)+e16d:-`Dz!bVJ3';
const password = 'P4s$w0Rd!';
const decrypted = await decryptString(encrypted, password);
console.log(decrypted);
//=> 'This is the secret'
})();
Async function that encrypts data
with password
. Returns an encrypted string, composed only of printable ASCII characters. More precisely, it uses all 94 printable ASCII characters (excluding space).
The output can be different for multiple executions with the same parameters, but all of them will be valid (and they will always have at least the same length).
Type: string
The string to be encrypted.
Type: string | Uint8Array
The string (or Uint8Array
) to be used as password.
Async function that decrypts encryptedData
with password
. Returns the original string.
If encryptedData
is not valid or the password is incorrect, this function will throw a DecryptionError
.
Type: string
The data to be decrypted.
Type: string | Uint8Array
The string (or Uint8Array
) to be used as password.
When you encrypt a string, the length of the encrypted result will be equal to 125% of the original length, plus 140 characters.
- encrypt-uint8array - Encrypt and decrypt an
Uint8Array
using anotherUint8Array
as password