자바의 seed 암호화 값을 c언어로 변경 질문입니다.

조회수 955회

웹에서 암호화된 값으로(seed128 cbckisa open source 사용)로 값이 넘어오면 c로 복호화(decription)을 해주려고합니다.

자바쪽


private static byte pbUserKey[]  = StringUtil.StringToByteLength("indexUserKey", 16); 
private static byte bszIV[]  = StringUtil.StringToByteLength("indexVectorKey", 16); 
private static String seed_utf = "utf-8";
byte[] enc_nt = null;
String str;
enc_nt = SEED_CBC_Encrypt(pbUserKey, bszIV, str.getBytes(seed_utf ), 0, str.getBytes(seed_utf ).length);
byte[] dec_nt = null;
dec = SEED_CBC_Decrypt(pbUserKey, bszIV, enc_nt , 0, enc_nt .length);

c쪽에서 어떻게 받아야할까요 ?

private static byte pbUserKey[]  = StringUtil.StringToByteLength("indexUserKey", 16); 
//--> BYTE pbUserKey[] = 위쪽 뒤를 어떻게 받아야 하는지 궁금합니다.
enc_nt = SEED_CBC_Encrypt(pbUserKey, bszIV, str.getBytes(seed_utf), 0, str.getBytes(seed_utf).length);

위에서 str.getBytes(seed_utf) 는 c에서 어떻게 받아야할까요? 그리고 .length도요.

아래처럼 했는데 안되서요.

 enc_nt = SEED_CBC_Encrypt(pbszUserKey, pbszIV, seed_utf , 0, strlen(seed_utf ));
 dec_nt = SEED_CBC_Decrypt(pbUserKey, bszIV, enc_nt , 0, strlen(enc_nt ));

답변부탁드립니다.

1 답변

  • 자바는 유니코드(utf16be) 를 사용합니다.

    즉 ansi 용인 strlen 대신 wcslen 을 사용해야 합니다.

    자바, c간의 통신이라면 인코딩에 신경써야 합니다.

    자바는 os에 따른 부작용이 적지만 c는 os 설정도 신경써야 합니다.

    getBytes 는 말그대로 암/복호화 작업을 위해 바이트의 배열로 변환하는 겁니다.

    length 는 배열의 길이를 구하는 것이구요.

    c에서 테스트를 암호화된 문자열을 받아다가 테스트 먼저 하세요

    c에서 암/복호화 테스트가 문제 없다면 자바 <-> c 간의 데이터 전송을 고민하세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)