developer tip

node.js에서 Base64 인코딩을 수행하는 방법은 무엇입니까?

copycodes 2020. 9. 29. 07:58
반응형

node.js에서 Base64 인코딩을 수행하는 방법은 무엇입니까?


node.js에는 아직 base64 인코딩이 내장되어 있습니까?

내가 이것을 묻는 이유는 final()from crypto16 진수, 바이너리 또는 ASCII 데이터 만 출력 할 수 있기 때문 입니다. 예를 들면 :

var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'hex');
ciph += cipher.final('hex');

var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'hex', 'utf8');
txt += decipher.final('utf8');

문서에 따르면 update()base64로 인코딩 된 데이터를 출력 할 수 있습니다. 그러나 final()base64를 지원하지 않습니다. 나는 시도하고 깨질 것입니다.

이렇게하면 :

var ciph = cipher.update(plaintext, 'utf8', 'base64');
    ciph += cipher.final('hex');

그렇다면 해독을 위해 무엇을 사용해야합니까? Hex 또는 base64?

따라서 암호화 된 16 진수 출력을 base64로 인코딩하는 기능을 찾고 있습니다.

감사.


버퍼 는 문자열 또는 데이터 조각을 가져오고 결과의 base64 인코딩을 수행하는 데 사용할 수 있습니다. 예를 들면 :

> console.log(Buffer.from("Hello World").toString('base64'));
SGVsbG8gV29ybGQ=
> console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'))
Hello World

버퍼는 전역 개체이므로 필요하지 않습니다. 문자열로 생성 된 버퍼는 선택적 인코딩 매개 변수를 사용하여 문자열의 인코딩을 지정할 수 있습니다. 사용 가능한 인코딩 toStringBuffer생성자 인코딩은 다음과 같습니다.

'ascii'-7 비트 ASCII 데이터 전용. 이 인코딩 방법은 매우 빠르며 설정된 경우 높은 비트를 제거합니다.

'utf8'-멀티 바이트 인코딩 유니 코드 문자입니다. 많은 웹 페이지 및 기타 문서 형식은 UTF-8을 사용합니다.

'ucs2'-2 바이트, 리틀 엔디안 인코딩 유니 코드 문자입니다. BMP (Basic Multilingual Plane, U + 0000-U + FFFF) 만 인코딩 할 수 있습니다.

'base64'-Base64 문자열 인코딩.

'binary'-각 문자의 처음 8 비트 만 사용하여 원시 이진 데이터를 문자열로 인코딩하는 방법입니다. 이 인코딩 방법은 더 이상 사용되지 않으며 가능한 경우 Buffer 객체를 선호하여 피해야합니다. 이 인코딩은 Node.js의 향후 버전에서 제거됩니다.


이전에 허용 된 답변 에는new Buffer() 6보다 큰 노드 버전에서 보안 문제로 간주되는이 포함되어 있습니다 (이 사용 사례에서는 입력이 항상 문자열로 강제 변환 될 수있는 것 같습니다).

Buffer생성자가에 따라되지 않습니다 문서 .

다음은 ws 라이브러리에서 사용할 수 있는 취약점예입니다 .

코드 조각은 다음과 같아야합니다.

console.log(Buffer.from("Hello World").toString('base64'));
console.log(Buffer.from("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'));

이 답변이 작성된 후 업데이트되었으며 이제 이것과 일치합니다.


crypto now supports base64 (reference):

cipher.final('base64') 

So you could simply do:

var cipher = crypto.createCipheriv('des-ede3-cbc', encryption_key, iv);
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('base64');

var decipher = crypto.createDecipheriv('des-ede3-cbc', encryption_key, iv);
var txt = decipher.update(ciph, 'base64', 'utf8');
txt += decipher.final('utf8');

I am using following code to decode base64 string in node API nodejs version 10.7.0

let data = 'c3RhY2thYnVzZS5jb20=';  // Base64 string
let buff = new Buffer(data, 'base64');  //Buffer
let text = buff.toString('ascii');  //this is the data type that you want your Base64 data to convert to
console.log('"' + data + '" converted from Base64 to ASCII is "' + text + '"'); 

Please don't try to run above code in console of the browser, won't work. Put the code in server side files of nodejs. I am using above line code in API development.

참고URL : https://stackoverflow.com/questions/6182315/how-to-do-base64-encoding-in-node-js

반응형