I했습니다 가지고 내가 Node.js를 포트에 원하는 다음 Java 코드 :포팅 AES 자바 코드는 Node.js를 위해 해독
// Java
byte[] rawKey = "deadbeefdeadbeef".getBytes("us-ascii");
SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
Cipher cip = Cipher.getInstance("AES/ECB/NoPadding");
cip.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] plaintext = cip.doFinal(ciphertext, 0, ciphertext.length);
여기 스트림
를 사용하여, Node.js를 내 시도이다// JS, using the crypto streams API
var decipher = crypto.createDecipher('aes-128-ecb', 'deadbeefdeadbeef');
decipher.setAutoPadding(false);
decipher.pipe(concat(function(plaintext) { console.log(plaintext); });
decipher.end(ciphertext);
그리고, 사용 또한 Node.js를 시도 .update()
나이 .final()
API :
// JS, using the `.update()` and `.final()` API
var decipher = crypto.createDecipher('aes-128-ecb', 'deadbeefdeadbeef');
decipher.setAutoPadding(false);
var pieces = [];
pieces.push(new Buffer(decipher.update(ciphertext)));
pieces.push(new Buffer(decipher.final()));
var plaintext = Buffer.concat(pieces);
이 두 버전은 정확한 길이 (입력과 동일한 길이)의 동일한 출력을 생성하지만이 출력은 동일한 입력 버퍼에서 작동하는 해독기의 Java 버전에서 생성 된 것과 동일한 일반 텍스트가 아닙니다. 어떻게 위에서 구성된 Java 해독기와 같은 Node.js 해독기를 설정할 수 있습니까?
감사합니다.
JS 코드에서 AES-256을 지정하는 동안 Java 코드에서 AES-128을 사용하는 것처럼 보입니다. JS API가 256 비트 암호 용 128 비트 키를 받아 들일 수있는 방법을 잘 모르겠습니다. 아마도 어떤 종류의 핵심 파생을 수행하고 있습니까? – ntoskrnl
내 코드가 오래된 코드에서 복사/붙여 넣기를했다. 지적 해 주셔서 감사합니다. 나는이 질문을 게시 할 즈음에 많은 것을 알아 냈다. 나는이 문제를 해결 한 이래로 곧 답변을 올릴 것입니다. 하지만 암호에 익숙하지 않고 대답의 의미를 이해하지 못합니다. 'crypto.createDecipheriv ('aes-128-ecb ','deadbeefdeadbeef ',' ');가 트릭을 실행했습니다. –
@ntoskrnl : 예, 잠시 동안 128 비트 키를 사용하여'aes-256-ecb'를 사용하고 있었는데 그렇지 않으면 에러를 표시하거나 표시하지 않았습니다. 원하지 않는 해독 출력을 생성합니다. –