2017-02-28 2 views
2

nodejs를 사용하여 AES-256 암호화 된 문자열을 해독하고 싶습니다. 내가 암호화 모듈을 사용하고 있습니다.AESEngine 및 PKCS7 패딩이있는 bouncycastle의 PaddedBufferedBlockCipher에 해당하는 암호는 무엇입니까?

문자열은 Bouncy castle java 라이브러리를 사용하여 암호화됩니다. 자바에서는 암호를 사용하여 intialsed된다

var decipher = crypto.createDecipher('aes-256-cbc',key);

내가 어떤 알고리즘을 사용한다 : nodejs의

PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());

crypto 모듈처럼, 그것을 intialising에 대한 암호의하려면 openssl의 목록을 사용? 여기

은 선택할 수있는 알고리즘의 목록은 다음과 같습니다. (난 어떤 CBC 또는 다른 모드가 표시되지 않습니다)

-bash-4.1$ openssl list-cipher-algorithms|grep AES-256 AES-256-CBC AES-256-CFB AES-256-CFB1 AES-256-CFB8 AES-256-CTR AES-256-ECB AES-256-OFB AES-256-XTS AES256 => AES-256-CBC aes256 => AES-256-CBC

답변

1

당신이 블록 암호 뭔가를 암호화하는 경우, 당신은 입력의 단일 블록을 가지고 블록 크기는 AES의 (출력의 단일 블록으로 패킷을 조작 할 수있는 블록 암호는 16 바이트입니다

  • 필요),
  • 구조화 된 방식으로 둘 이상의 블록을 암호화 할 수있는 작동 모드
  • 블록 크기의 배수만큼 정확히 암호화되지 않은 내용을 암호화 할 수있는 패딩.

표시 한 PaddedBufferedBlockCipher에는 두 개만 있습니다. 작동 모드는 단순히 블록 암호를 각 블록에 개별적으로 적용하는 것으로 구성되어 있기 때문에 ECB 모드임을 암시합니다.

var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, ''); 

교환 비트 키의 크기에 대한 xxx :

당신은과 Node.js를 동일한 동작을 얻을 수 있습니다. 유효한 크기는 128 비트, 192 비트 및 256 비트입니다. 다른 모든 것은 작동하지 않습니다. 또한 키의 인코딩이 올바른지 확인하십시오.

createDecipher 대신 여기 createDecipheriv이 사용되는 이유가 궁금한 경우 해당 기능을 모두 신중하게 비교하는 것이 좋습니다. createDecipher은 키가 아니라 암호를 요구합니다.


기타 고려 사항 :

ECB mode를 사용하지 마십시오. 결정 론적이며 따라서 의미 론적으로 안전하지 않습니다. 최소한 CBC 또는 CTR과 같은 무작위 모드를 사용해야합니다. padding oracle attack과 같은 공격이 불가능하도록 암호문을 인증하는 것이 좋습니다. 이는 GCM 또는 EAX와 같은 인증 된 모드 또는 encrypt-then-MAC 구성표를 사용하여 수행 할 수 있습니다.

+0

설명해 주셔서 감사합니다. 나는 ECB가 어떤 IV도 가지지 않고'createDecipher (알고리즘, 패스워드)'가 패스워드를 기반으로 자신의 키를 생성한다는 것을 발견 한 후 같은 방식으로 그것을 해결했다. – avck

0

AES-256-ECB와 데이터를 해독.

PKCS 패딩 사용에 대해서는 decipher.setAutoPadding(true)으로 전화하십시오.