혹시 안드로이드에서 Cipher.getInstance("SEED/CBC/PKCS5Padding", provider) 지원여부 알고계시거나 알수있는방법 아시는분
답변좀부탁드립니다..ㅠ_ㅠ
안드로이드용이 아닌 일반JAVA로 구현시 무리없이 돌아가는데....SEED만 빼고 지원한다는것도 이상하고...답답하네요..
혹 seed+cbc 운용모드 Cipher 사용없이 구현하는 방법이라도 살짝알려주시면 감사하겠습니다.
또는 위에서 답변 드린대로 Bouncy Castle 라이브러리의 원소스를 받아서 보셔도 들어 있구요.
Bouncy Castle 내에서 소스를 추출하려면, 필요 없는 부분은 제거하는 작업을 해야겠지요.
아니면 Bouncy Castle 라이브러리(jar)를 안드로이드 프로젝트 내에 포함시켜서 사용해도 되구요.
하지만 사이즈가 크겠죠. 라이트 버전도 있는걸 봤습니다.
SEED가 아니더라도 AES는 안드로이드에 기본으로 포함하고 있으므로 AES 사용하셔도 되구요.
CBC/PKCS5Padding/PKCS7Padding 등 다 있습니다.
현제 구현되어있는 코드는 Bouncy Castle 라이브러리를 안드로이드 프로젝트에 포함시켜서 사용하는 것으로 구현되어 있습니다.
일반 JAVA 클레스로 구현한상태에서 잘돌아가던 녀석이 Android로 구현해보니 알고리즘을 찾을수없다는 에러가 발생하였습니다.
==에러발생부분==
BouncyCastleProvider provider = new BouncyCastleProvider();
Cipher cipher = Cipher.getInstance("SEED/CBC/PKCS5Padding",provider);
소스부분 확인결과 당현한것이겠지만 안드로이드SDK 에서 제공하는 cipher 클레스와 일반java에서의 cipher 클레스코드가
전혀 다르더라라구요...
그래서 나름 생각한것은 기존 JAVA JAR을 추가하여 cipher 클레스를 호출해서 사용하는것이였습니다.
그런데 도무지방법을 모르겠더라고요..ㅠ_ㅠ 지금 생각하고 있는 방식으로 해결가능한 것인지 너무 답답하고 궁금합니다...
공인인증서 관련 작업이라 국내에서 사용하는 SEED를 반듯이 이용하여야 해서 AES사용은 불가능할듯합니다..ㅠ
저는 AES만을 이용할일이 있어서, Bouncy Castle 라이브러리를 사용하여 구현은 해보지 않았습니다.
하지만 암호알고리즘을 쓰고 있는 다른 외국쪽의 앱을 디컴파일해본 결과 Bouncy Castle 라이브러리를 사용한 예를 보았습니다.
그러므로 사용하신 방법이 API 형태가 틀렸을 수도 있겠죠.
구글에서 android와 bouncy castle 키워드를 통하여 검색해보시면, 사용예가 있지 않을까 생각됩니다.
또는 안드로이드 오픈소스 코드 중에 해당 라이브러리를 사용하고 있는 앱도 있을거라 봅니다.
구글 코드 사이트에서 찾아보시고, 참고하시면 될것 같구요.
그런데 공인인증서 작업이라고 하셨는데, 오픈소스 라이브러리를 사용하시는 것 보다는
암호 알고리즘 소스를 직접 컴파일하여 사용하는 방법이 보안상 좋을 것 같습니다.
그러나 SEED만을 이용하는게 아니라 다른 알고리즘도 사용하신다면, 라이브러리를 써야겠네요...
한참 잊고있다가 아차 싶어서 뎃글 남기게 되었습니다.
조언해주신부분 참고하여 파고들어서 결국에는 해결했습니다.^^
dcmru님 다시한번 감사드립니다.
시간이 너무 지나버렸네요;; 한참전일인데 너무 정신없다보니 오늘 펌들어왔다 생각났습니다.
혹다른분도 저같은 일을 경험하실까봐 뎃글로 간단히 이유를 남기자면 바운스케슬이 안드로이드 1.6인가부터 포함되어 있었습니다.
문제는 2년전 버전이라 seed알고리즘이 없었습니다.ㅠ_ㅠ
같은 이름의 라이브러리 였기때문에 이전버전의 안드로이드 탑제되어있는 바운스 케슬을 계속적으로 사용하고있는 문제점이였고
별도의 바운스케슬 라이브러리를 만들어 사용함으로써 해결하였습니다.^^
그러므로 SEED 자바 소스를 직접 포함하여 컴파일하여 사용하시면 될듯하네요.
운용모드와 소스는 Bouncy Castle를 참고하시구요.