AES와 RSA를 사용하여 보안 연결을 시도하는 중 키를 문자열로 변환하여 네트워크를 통해 전송하려고하면 다시 byte []로 변환됩니다. 값이 변경되었습니다. 내 생각을 이해하기 위해 아래의 코드를 볼 수 있습니다.바이트 []을 문자열로 변환 한 다음 바이트 []로 다시 변환 할 때 문제가 발생했습니다.
public class test {
public static String asHex (byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
String r = new String(raw,"UTF-8");
System.out.println(asHex(raw));// prints for example fd812245c9bfc4106294d51bf27e3796
byte[] t = r.getBytes("UTF-8");
System.out.println(asHex(t)); // prints for example : efbfbd2245c9bfefbfbd1062efbfbdefbfbd1befbfbd7e37efbfbd
}
}
이것이 문제의 원인인지는 모르겠지만 UTF-8을 인코딩으로 사용하는 것은 좋은 생각이 아닙니다. 모든 바이트 시퀀스가 유효한 UTF-8 문자열이 아니기 때문일 수 있습니다. ISO8859-1과 같은 싱글 바이트 인코딩을 사용합니다. –
@Philipp : 인코딩 된 텍스트라고 가정하는 * 인코딩을 사용하는 것은 매우 나쁜 생각입니다. –