일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- oracle
- 디자이어
- javascript
- FTP
- Java
- mybatis
- htc
- 오라클
- DBCP
- HD2
- 모토로이
- Desire
- 삼성 오디세이
- 이클립스
- 자바
- 구글
- jvm
- jsp
- 초대장
- HTML
- tomcat
- Spring
- jeus
- SQL
- SWFUpload
- USB
- C34G55T
- eclipse
- 삼성 오디세이 G5 C34G55T
- ant
- Today
- Total
앙되요
[javascript & java] aes 암호화. javascript 암호화 java 복호화 본문
<javascript>
var key = CryptoJS.enc.Hex.parse('01010101010101010101010101010101');
var iv = CryptoJS.enc.Hex.parse('01010101010101010101010101010101');
var encrypted1 = CryptoJS.AES.encrypt(f.a.value, key, { iv: iv });
f.a.value = encrypted1;
위 내용을 보면 010101 -> 이부분은 키값의 16진수 byte[] 형이다. 키값을 16진수로 변환하여 직접 넣어야 문제가 없다.
또한 aes 암호화는 128, 192, 256비트인 키를 사용하기에 키값은 16자리의 문자를 변환하여 사용하여야 한다.
저렇게 해서 form태그 중 a 파라미터로 암호화된 값이 java쪽으로 넘어가게 된다.
참고로 암호회된 encrypted1 값은 base64 encode 되어있다.
<java>
...중략
EnCryto.Decrypt(request.getParameter("a"));
...중략
final static String KEY = "01010101... => 이것의 원래 문자키값";
public static String Decrypt(String text) throws Exception
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] b= KEY.getBytes("euc-kr");
SecretKeySpec keySpec = new SecretKeySpec(b, "AES");
AlgorithmParameterSpec ivSpec = new IvParameterSpec(b);
cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);
BASE64Decoder decoder = new BASE64Decoder();
byte[] results = cipher.doFinal(decoder.decodeBuffer(text));
return new String(results);
}
이렇게 해주면 javascript에서의 aes 암호화를 복호화 할수 있다.
참고로 byte[] -> string -> byte[] 변환시 자바에서는 버그가 있어서 제대로 된 값이 나오지 않는다고 한다;
이것때문에 얼마나 고생한지..
암튼 완성! 잘된다!