이상한 이유로 인해 노드의 내장 Cipher
및 Decipher
클래스가 예상대로 작동하지 않습니다. documentation는 cipher.update
Node.js Crypto AES Cipher
"는 암호화 된 내용을 반환하고가 스트리밍으로 새로운 데이터를 여러 번 호출 할 수 있습니다."고 말한다
docs도 cipher.final
는 "남아있는 암호화 된 내용을 반환합니다."고 명시
하지만, 내 테스트에서 당신 해야 전화 cipher.final
따라서 암호를 렌더링, 쓸모없는 모든 데이터를 객체 얻을, 당신은 새로운 Cipher 객체를 생성 할 필요가 다음 블록을 처리 할 수 있습니다. 초기화 벡터 등의 비밀과, crypto.createCipher
또는 crypto.createCipheriv
를 사용할 때 이런 것을
var secret = crypto.randomBytes(16)
, source = crypto.randomBytes(8)
, cipher = crypto.createCipher("aes128", secret)
, decipher = crypto.createDecipher("aes128", secret);
var step = cipher.update(source);
var end = decipher.update(step);
assert.strictEqual(source.toString('binary'), end); // should not fail, but does
참고.
var step = cipher.update(source) + cipher.final();
var end = decipher.update(step) + decipher.final();
그러나 이것은, 전술 한 바와 같이, 양 및 cipher
decipher
쓸모 렌더링 : 수정은 다음과 같이 라인들 (6, 7)를 대체한다.
이것은 노드의 기본 제공 암호화가 작동하는 방법이지만 분명히 아닙니다. 이 문제는 Node 또는 Node의 버그를 어떻게 사용합니까? 아니면 잘못된 것을 기대하고 있습니까? 직접 AES를 구현할 수는 있지만 시간이 많이 걸리고 성가시다. 암호화 또는 암호 해독이 필요할 때마다 새로운 Cipher
또는 Decipher
개체를 새로 만들어야합니까? 내가 하천의 일부로 그렇게한다면 비싼 것 같습니다.
패딩 사용 중지가 안전하지 않습니다. –
팁 주셔서 감사합니다.보안과 관련이없는 환경에서 보안 시스템의 프로토콜을 모방하려했기 때문에 문맥 상 중요하지 않습니다. – skeggse
atuo 패딩 소금 –