UNPKG

icryptor

Version:

Encrypt tools for private accounts

88 lines (72 loc) 2.12 kB
#!/usr/bin/env node const path = require('path') const adm_zip = require('adm-zip') const readline = require('readline-sync') const chacha = require('chacha-js') const blake2b = require('blake2b') const fs = require('fs') const program = require('commander') function b2b(data) { var h=blake2b(32) h.update(data) return Buffer.from(h.digest()) } var nonce=Buffer.alloc(12) nonce.fill(0) function cc(data,key) { var c=new chacha.ChaCha20(key,nonce) return c.update(data) } program .version("1.0.1") .option('-d, --decode [type]', 'decode') .option('-e, --encode [type]', 'encode') .option('-p, --password [type]', 'password') .option('-c, --count [type]', 'encrypt count') .parse(process.argv); if(program.encode) { program.encode= path.resolve(process.cwd(),program.encode) console.log('encode: '+program.encode) } if(program.decode) { program.decode = path.resolve(process.cwd(),program.decode) console.log('decode: '+program.decode) } if(!program.password) { program.password=readline.question("Input Password: ",{ hideEchoBack: true, }) } if(!program.count) { program.count = 100 } var password = Buffer.from(program.password,"binary") var passwords=[] for(var i=0; i<program.count; i++) { if(i===0) { passwords.push(b2b(password)) } else { passwords.push(b2b(passwords[i-1])) } } if(program.encode) { var zip = new adm_zip() zip.addLocalFolder(program.encode) zip.writeZip(program.encode+"_zip",true) var data=fs.readFileSync(program.encode+"_zip") for(var i=0;i<program.count;i++) { data=cc(data,passwords[i]) } fs.writeFileSync(program.encode+"_c",data) fs.unlinkSync(program.encode+"_zip") } if (program.decode) { var data=fs.readFileSync(program.decode) for(var i=0;i<program.count;i++) { data=cc(data,passwords[program.count-i-1]) } fs.writeFileSync(program.decode+"_zip",data) var unzip = new adm_zip(program.decode+"_zip") unzip.extractAllTo(program.decode+"_p",true) fs.unlinkSync(program.decode+"_zip") }