node.js 및 클라이언트 측에서 Fullstack AES-GCM 암호화 복호화
2541 단어 encryptioncryptonode
완전히 실행 가능한 요지 코드here를 찾을 수 있습니다.
AES(Advanced Encryption Standard)는 여기에서 더 읽을 수 있는 다양한 모드가 있는 대칭적인 종류의 암호화 방법입니다.
더 이상 요점에 도달합시다. 서버 측(Node.js)에서 일부 메시지를 암호화하고 암호화된 메시지를 클라이언트 측으로 다시 보내고 싶었습니다. React, Vue, Angular, 바닐라 JS 등
암호화 항목은 민감하기 때문에 브라우저에서 즉시 제공하는 네이티브 API를 사용하고 싶었지만 AES-GCM 방식에 대한 리소스가 부족하여 이상한 문제가 발생했지만 결국 솔루션을 사용했습니다.
이것은 서버 측(node.js)에서 실행되어야 하는 코드입니다.
function encrypt(message){
const KEY = crypto.randomBytes(32)
const IV = crypto.randomBytes(16)
const ALGORITHM = 'aes-256-gcm';
const cipher = crypto.createCipheriv(ALGORITHM, KEY, IV);
let encrypted = cipher.update(message, 'utf8', 'hex');
encrypted += cipher.final('hex');
const tag = cipher.getAuthTag()
let output = {
encrypted,
KEY: KEY.toString('hex'),
IV: IV.toString('hex'),
TAG: tag.toString('hex'),
}
return output;
}
그리고 이것은 클라이언트 측(브라우저)에서 실행되어야 하는 코드입니다.
function decrypt() {
let KEY = hexStringToArrayBuffer(data.KEY);
let IV = hexStringToArrayBuffer(data.IV);
let encrypted = hexStringToArrayBuffer(data.encrypted + data.TAG);
window.crypto.subtle.importKey('raw', KEY, 'AES-GCM', true, ['decrypt']).then((importedKey)=>{
console.log('importedKey: ', importedKey);
window.crypto.subtle.decrypt(
{
name: "AES-GCM",
iv: IV,
},
importedKey,
encrypted
).then((decodedBuffer)=>{
let plaintext = new TextDecoder('utf8').decode(decodedBuffer);
console.log('plainText: ', plaintext);
})
})
function hexStringToArrayBuffer(hexString) {
hexString = hexString.replace(/^0x/, '');
if (hexString.length % 2 != 0) {
console.log('WARNING: expecting an even number of characters in the hexString');
}
var bad = hexString.match(/[G-Z\s]/i);
if (bad) {
console.log('WARNING: found non-hex characters', bad);
}
var pairs = hexString.match(/[\dA-F]{2}/gi);
var integers = pairs.map(function(s) {
return parseInt(s, 16);
});
var array = new Uint8Array(integers);
return array.buffer;
}
코드가 충분히 표현할 수 있다고 생각하지만 암호화된 태그와 인증 태그를 함께 연결하여 미묘한 암호화 API의 암호 해독 메서드에 전달해야 합니다.
질문이 있으시면 댓글로 알려주세요 ;)
Reference
이 문제에 관하여(node.js 및 클라이언트 측에서 Fullstack AES-GCM 암호화 복호화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shahinghasemi/fullstack-aes-gcm-encryption-decryption-in-node-js-and-the-client-side-8bm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)