2016-08-12 7 views
0

여기 거래의 Cipher.update에 전달 :데이터의 손실 DES (Node.js를)를 사용하는 동안

이 같은 구조화 된 데이터의 버퍼가 :

(내게로 계산)

[39 bytes of header] + [body] + [padding]. 파일에 저장하면 실제로 구조를 인식 할 수 있으며 모든 것이 잘된 것처럼 보입니다.

그리고, I는 현재의 버퍼 암호화 DES-CBC에, 그리고 어떤 I 할 것은

a) 새로운 IV (autoPadding를 키를 가지며, 계산 DES 랩퍼 인스턴스화 다음 Cipher 오브젝트 거짓을 (데이터 버퍼이고, EN이 Cipher 오브젝트)

var buf1 = en.update(data); 

I이다 :는 다음과 같이 버퍼가 다음 암호화 도착)
C의 wrapper DES에 버퍼 합격)
b)도 만들어 파일에 buf1을 출력하십시오 (그런 다음, 내 경우에는 소켓에) 바이트를 검색 한 다음 해독하여 다음 구조를 얻습니다. [header][body] 그러나 파일에 데이터를 출력하고 바이트를 검색하면 시작 구조가 생깁니다. 나는 또한 에 en.final()을 추가해야한다는 것을 알고 있지만, 필자의 경우에는 autoPadding을 사용하여 이러한 값을 필요로하지 않으며 false가되면 오류가 발생합니다.

+1

** 요즘에는 DES를 사용하지 마십시오. ** 56 비트 보안 만 제공합니다. AES는 128 비트의 가장 낮은 키 크기로 더욱 안전하기 때문에 훨씬 더 좋습니다. DES에서 최대 암호문 크기에 대한 실질적인 제한도 있습니다. [3DES와 AES의 보안 비교] (http://security.stackexchange.com/q/26179/45523)를 참조하십시오. –

+0

Artjom, 고맙습니다.하지만 지금은 DES를 사용해야합니다. – ProTheJoker

답변

2

API는 계약을 제공합니다. 계약의 속성 중 하나는 암호화를 마쳤을 때 Cipher#final([output_encoding]) 번으로 전화해야한다는 것입니다. 패딩을 Cipher 인스턴스가 처리 할 필요가 없더라도 코드는 재사용을 위해 작성되므로 패딩 옵션에 관계없이 같은 방식으로 사용될 것으로 예상됩니다.

+0

이 팁을 가져 주셔서 감사합니다. 게시하기 전에 이미 생각했습니다. 질문을 끝내려하고 있습니다. 사실 마지막으로 내 "사용자 지정"패딩과 DES 패딩을 제공하는데, 슬라이스를 사용하여 제거하고 원하는 것을 얻을 수 있습니다 ^^ 감사! – ProTheJoker