2009-07-17 3 views
1

현재 java.security.signature를 사용하여 서명을 만들면 문자열을 다시 전달합니다. 문자열을 메모장 ++로 복사 할 때만 볼 수있는 특수 문자가 있기 때문에이 문자열을 사용할 수 없습니다.이 특수 문자를 제거하면 프로그램에서 문자열의 나머지 부분을 사용할 수 있습니다. 메모장에서문자열에서 이상한 문자를 제거하는 데 도움이 필요합니다.

그들은 ACK GS STX SI의 SUB ETB BS VT는

난 정말 그들의 타는 것을 얻는 방법을 말할 그래서 하드 무엇인지 이해하지 못하는 단어와 함께 블랙 박스처럼 보인다.

내가 잠재적으로 유사한 문자를 제거하기 위해 실행할 수있는 기능이 있습니까? 당신이 서명을 "만드는"되는 방법

내가 게시물에 제공된 base64로 클래스를 사용할 때, 내가 서명

System.out.println(signature); 
String base64 = Base64.encodeBytes(sig); 
System.out.println(base64); 
String sig2 = new String (Base64.decode(base64)); 
System.out.println(sig2); 

로 돌아가 어차피 출력

”zÌý¥y]žd”xKmËY³ÕN´Ìå}ÏBÊNÈ›`Αrp~jÖüñ0…Rõ…•éh?ÞÀ_û_¥ÂçªsÂk{6H7œÉ/”âtTK±Ï…Ã/Ùê² 
lHrM/aV5XZ5klHhLbctZs9VOtMzlfc9Cyk7Im2DOkXJwfmoG1vzxMIVS9YWV6Wg/HQLewF/7X6XC56pzwmt7DzZIN5zJL5TidFRLsc+Fwy/Z6rIaNA2uVlCh3XYkWcu882tKt2RySSkn1heWhG0IeNNfopAvbmHDlgszaWaXYzY= 
[[email protected] 
+0

그리고 문제는? – akarnokd

답변

5

암호화 서명이 문자열이 아닌 바이트를 생성하기 때문에 홀수 문자가 있습니다. 따라서 인쇄 가능한 표현을 원하면 Base64 encode it (here's a public domain implementation for Java)이어야합니다.

암호화되지 않은 문자를 암호화 서명에서 제거하면 해당 서명을 검증에 사용할 수 없으므로 쓸모 없게됩니다.

업데이트 :

[B에서 @의 15356d5

이 바이트 배열에서 호출 된 toString 결과이다. "["는 배열을 의미하고 "B"는 바이트를 의미하고 "15356d5"는 배열의 주소입니다. 당신은 당신이 [Signature.verify]에 디코드 나가 배열을 (전달해야 http://java.sun.com/j2se/1.4.2/docs/api/java/security/Signature.html#verify(byte[]))

뭔가처럼 :.

Signature sig = new Signature("dsa"); 
sig.initVerify(key); 
sig.verify(Base64.decode(base64)); // <-- bytes go here 
+0

signature의 base64 변환은 여전히 ​​기술적 인 관점에서 유효한 서명으로 유지됩니까? – ChronoXIII

+0

모든 데이터가 포함됩니다. base64 인코딩을 사용하여 서명의 유효성을 검사하기 전에 반대로 인코딩해야합니다. –

+0

Signature에 base64 변환을 다시 변경하는 데 문제가 있습니다. 내 초기 게시물을 업데이트했습니다. – ChronoXIII

5

을 제공 ? sign 메서드를 사용하면 문자열이 아닌 바이트 배열이 반환됩니다. 이것은 일부 텍스트의 이진 표현이 아니라 단지 임의의 이진 데이터입니다. 그게 당신이 사용해야하는거야, 당신이 문자열로 변환 해야하는 경우 데이터 손상을 피하기 위해 base64 변환을 사용해야합니다.

+0

나는 base64를 서명 바이트 배열로 변환합니까? – ChronoXIII

0

나는 당신의 문제가 올바르게, 당신은 코드 문자를 제거 할 필요가 이해한다면 (32) 아래를 제외하고 어쩌면 문자 9 (탭), 문자 (10) (새로운 라인) 및 문자 (13) (귀국일)

편집 :. 나는이 같은 암호화 출력을 처리하는 등 다른 사람들과 동의가 아닌 당신이 일반적으로 원하는 .

+5

"서명 제거"데이터는 거의 좋은 아이디어가 아닙니다.나는 그것이 더 근본적인 문제라고 강력하게 의심한다. –

+0

나는 너무 궁금해하고 있었다. – akarnokd

+0

32 이하 코드로 무엇을 의미합니까? – ChronoXIII

관련 문제