icryptor
Version:
Encrypt tools for private accounts
75 lines (57 loc) • 1.86 kB
JavaScript
const readline = require('readline-sync')
const blake2b = require('blake2b')
const program = require('commander')
const url = require('url')
const bsx = require('base-x')
const bs62 = bsx('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
const bs94 = bsx('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+`-={}|[]\\:";\'<>?,./')
function b2b(data) {
var h=blake2b(32)
h.update(data)
return Buffer.from(h.digest())
}
program
.version("1.0.1")
.option('-s, --site [type]', 'site: taobao.com, qq.com, ...')
.option('-u, --user [type]', 'user: user0,user1, ...')
.option('-p, --password [type]', 'main password')
.option('-c, --count [type]', 'encrypt count')
.option('-t, --template [type]', 'template: [user]:[password]@[site]:[count]')
.option('-a, --allow', 'allow special: use base64 otherwise use base58')
.parse(process.argv);
if(program.template) {
var u=url.parse('http://'+program.template)
var sp=u.auth.split(':')
program.user=sp[0]
program.password=sp[1]
program.site=u.hostname
program.count=u.port
}
if(!program.user) {
program.user = ''
}
if(!program.site) {
program.site = ''
}
if(!program.count) {
program.count=100
}
if(!program.password) {
program.password=readline.question("Input Password: ",{
hideEchoBack: true,
})
}
console.log('template is: '+program.user+':['+program.password.length+']@'+program.site+':'+program.count)
program.template=program.user+':'+program.password+'@'+program.site+':'+program.count
var pass = Buffer.from(program.template,'binary')
for(var i=0;i<program.count;i++) {
pass=b2b(pass)
}
var result;
if(program.allow) {
result = bs94.encode(pass)
} else {
result = bs62.encode(pass)
}
console.log(' password is: '+result)