permutation cipher for encrypting and decrypting a hexadecimal string
Adds an extra layer of protection to your already encrypted code's hex output by essentially turning it into nothing but valid hex.
demo: https://angeal185.github.io/hex-permutation-cipher/
npm
$ npm install hex-permutation-cipher --save
bower
$ bower install hex-permutation-cipher
git
$ git clone git@github.com:angeal185/hex-permutation-cipher.git
const per = require('hex-permutation-cipher')
<script src="./dist/hex-permutation.min.js"></script>
- each hex character in the string is replaced with another random hex character and returns a decrypt key the same length as the string.
- padding can be added to the ciphertext output by using the buff option
- the encrypt function returns the generated key. dont lose it.
//default options
{
reverse: false, // {boolean} ~ reverse hex string
lower: false, // {boolean} ~ output lowercase hex
buff: false // {boolean/array} ~ prepend/append random hex buffer
}
/*
* reverse should be set to either true or false for both
encrypt/decrypt ~ default: false
* buff accepts either a boolean for false or an array for true.
~ [1,2] would prepend/slice 1 byte(2 hex chars) to the start
and append/slice 2 bytes(4 hex chars) of random data to the end.
this should not be left as false!
*/
/**
* callback
* @param {string} hex ~ valid hex string
* @param {integer} iterations
* @param {object} config ~ optional options
* @param {function} cb ~ callback function(err,data)
**/
per.enc(hex, iterations, config, cb) //returns callback
/**
* callback
* @param {string} hex ~ valid hex string
* @param {string} key ~ decryption key
* @param {integer} iterations
* @param {object} config ~ optional options
* @param {function} cb ~ callback function(err,data)
**/
per.dec(hex, key, iterations, config, cb) //returns callback
/**
* sync
* @param {string} hex ~ valid hex string
* @param {integer} iterations ~ integer
* @param {object} config ~ optional options
**/
per.encSync(hex, iterations, config) //returns a string
/**
* sync
* @param {string} hex ~ valid hex string
* @param {string} key ~ decryption key
* @param {integer} iterations ~ integer
* @param {object} config ~ optional options
**/
per.decSync(hex, key, iterations, config) //returns a string
/**
* promise
* @param {string} hex ~ valid hex string
* @param {integer} iterations ~ integer
* @param {object} config ~ optional options
**/
per.encP(hex, iterations, config) //returns a promise
/**
* promise
* @param {string} hex ~ valid hex string
* @param {string} key ~ decryption key
* @param {integer} iterations ~ integer
* @param {object} config ~ optional options
**/
per.decP(hex, key, iterations, config) //returns a promise
// demo
const testHexStr = 'ABCDEF0123456789',
config = {
reverse: true,
lower: true,
buff: [2,4]
}
/* callback */
//encrypt
per.enc(testHexStr, 8, config, function(err, res){
if(err){return console.log(err)}
console.log(res)
//decrypt
per.dec(res.data, res.key, res.iterations, config, function(err, res){
if(err){return console.log(err)}
console.log(res)
})
})
/* end callback */
/* sync */
// encrypt
let syncEnc = per.encSync(testHexStr, 8, config);
console.log(syncEnc)
// decrypt
let syncDec = per.decSync(syncEnc.data, syncEnc.key, syncEnc.iterations, config)
console.log(syncDec)
/* end sync */
/* promise */
//encrypt
per.encP(testHexStr, 8, config).then(function(res){
console.log(res)
//decrypt
per.decP(res.data, res.key, res.iterations, config).then(function(res){
console.log(res)
}).catch(function(err){
console.log(err)
})
}).catch(function(err){
console.log(err)
})
/* end promise */