java 코드를 nodej로 변환하려고합니다. 여기javax.crypto.Cipher Nodejs의 동일한 코드 Crypto Javascript
public static String encrypt(String accessToken) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
String merchantKey = "11111111111111111111";
String st = StringUtils.substring(merchantKey, 0, 16);
System.out.println(st);
Key secretKey = new SecretKeySpec(st.getBytes(), "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedByte = cipher.doFinal(accessToken.getBytes());
// convert the byte to hex format
StringBuffer sb = new StringBuffer();
for (int i = 0; i < encryptedByte.length; i++) {
sb.append(Integer.toString((encryptedByte[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
내가
function freeChargeEncryptAES(token){
var fcKey = "11111111111111111111".substring(0, 16);
var cipher = crypto.createCipher('aes-128-ecb', fcKey, "");
var encrypted = cipher.update(token,'ascii','hex');
encrypted += cipher.final('hex');
return encrypted;
}
내가 같은 출력을 얻을 수 아니에요 OUT- 알 수 있었던 것입니다. 예를 들어
토큰 = "ABCDEFGH"
자바 코드 출력하는 경우 - bc02de7c1270a352a98faa686f155df3
Nodejs 코드 출력 - eae7ec6943953aca94594641523c3c6d
나는 기본적으로 암호화 알고리즘이라고 this answer에서 읽었습니다 aes-ecb IV가 필요하지 않습니다. 키 길이가 16이므로, aes-128-ecb
(16 * 8 = 128)은 사용해야하는 알고리즘입니다.
누군가가 문제를 파악하는 데 도움을 줄 수 있습니까 ??
crypto.createCipher('aes-128-ecb', fcKey, "");
이유는 간단하다
- 투 -
crypto.createCipheriv('aes-128-ecb', fcKey, "");
** 절대로 [ECB 모드] (http://crypto.stackexchange.com/q/14487/13022) **를 사용하지 마십시오. 결정 론적이며 따라서 의미 론적으로 안전하지 않습니다. 적어도 CBC (http://crypto.stackexchange.com/q/22260/13022) 또는 [CTR] (http://crypto.stackexchange.com/a/2378/)와 같은 무작위 모드를 사용해야합니다. 13022). [패딩 오라클 공격] (http://crypto.stackexchange.com/q/18185/13022)과 같은 공격이 불가능하도록 암호문을 인증하는 것이 좋습니다. GCM 또는 EAX와 같은 인증 된 모드 나 [암호화 후 MAC] (http://crypto.stackexchange.com/q/202/13022) 구성표를 사용하여이 작업을 수행 할 수 있습니다. –
IV는 예측 불가능해야합니다 (읽기 : 임의). 고정 IV를 사용하지 마십시오. 이는 암호화를 결정 론적으로 만들고 따라서 의미 론적으로 안전하지 않기 때문입니다. 암호문을 관찰하는 침입자는 동일한 메시지 접두어가 언제 전에 전송되었는지를 결정할 수 있습니다. IV는 비밀이 아니므로 암호문과 함께 보낼 수 있습니다. 대개 암호문 앞에 붙이고 해독하기 전에 잘라낸 것입니다. –
@ArtjomB. , 정보 주셔서 감사하지만 내 유스 케이스가 다릅니다. 위의 자바 코드를 nodej로 변환하고 싶습니다. java 구현은 알고리즘을 지정하지 않지만 기본적으로 Oracle Java JCE 공급자는 ECB를 사용합니다. –