프로그래밍
Node.js crypto des3 with zero padding
약올랑
2014. 9. 25. 12:01
Node.js에서 대표적인 암호화 라이브러리는 crypto이다.
setAutoPadding 함수를 이용해 내장 패딩 알고리즘을 켜고 끌 수 있어,
커스텀 패딩 알고리즘을 적용할 수 있다.
Zero 패딩 정도는 내장되어 있어도 좋았을텐데 없어, 간단하게 만들어 보았다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var crypto = require('crypto'); | |
console.log(crypto.getCiphers()); | |
var key = new Buffer('1234567890@WWW@awrrrrrss', 'ascii'); | |
var iv = new Buffer('12378900', 'ascii'); | |
var plaintext = customPadding("123", 128, 0x0, 'hex'); | |
var cipher = crypto.createCipheriv('des3', key, iv).setAutoPadding(false); | |
var ciph = cipher.update(plaintext, 'buffer', 'hex'); | |
ciph += cipher.final('hex'); | |
var decipher = crypto.createDecipheriv('des3', key, iv).setAutoPadding(false); | |
var txt = decipher.update(ciph, 'hex', 'utf8'); | |
txt += decipher.final('utf8'); | |
function customPadding(str, blockSize, padder, format) { | |
str = new Buffer(str, "utf8").toString(format); | |
//1 char = 8bits | |
var bitLength = str.length * 8; | |
if (bitLength < blockSize) { | |
for (var i = bitLength; i < blockSize; i += 8) { | |
str += padder; | |
} | |
} else if (bitLength > blockSize) { | |
while ((str.length * 8) % blockSize != 0) { | |
str += padder; | |
} | |
} | |
return new Buffer(str, format); | |
} |