.NET에 변환하려고하는 java에 샘플 코드가 있습니다. 이 코드는 문자열을 암호화하고 서명을 추가합니다. BouncyCastle 공급자를 사용하는 Java 코드와 서명을 추가하는 코드가 다음과 같습니다.다른 서명을 생성하는 .NET 및 Java
InputStream in = new FileInputStream(derkeyfilename);
byte[] privKeyBytes = new byte[in.available()];
in.read(privKeyBytes);
KeyFactory rsaKeyFac = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(privKeyBytes);
private RSAPrivateKey myPrivateKey = (RSAPrivateKey) rsaKeyFac.generatePrivate(encodedKeySpec);
MessageDigest md = MessageDigest.getInstance("MD5", "BC");
byte[] digest = md.digest(msg);
Signature sig = Signature.getInstance("MD5withRSA", "BC");
sig.initSign(myPrivateKey);
sig.update(digest);
byte[] signature = sig.sign();
byte[] base64 = Base64.encodeBase64(signature);
String signature = new String(base64);
누구든지 나를 C#으로 변환하는 데 도움을 줄 수 있습니까? 내가 몇 가지 샘플 (C#, openssl 등 BouncyCastle) 시도하고 모두 자바가 생산하는 것과 다른 동일한 서명을 반환하고 있습니다. 내가 찾은 한 가지 더 자바 사용합니다. 개인 키를 C#에서 지원되지 않습니다 (내가 아는 한). 동일한 인증서에 .pem 키를 사용하고 있습니다. 당신이 당신의 C#을 점을 표시하지 않기 때문에
'InputStream'에서 읽는 방법이 깨져서 시작됩니다. 개인적으로 나는'available()'을 신뢰하지 않으며 스트림에서 읽지 말고'read'의 리턴 값을 무시해서는 안됩니다. 다이제스트 자체가 같은지 확인 했습니까? 문자열에서 시작하는 바이트는 어떻게 받고 있습니까? 짧지 만 완전한 * 예제는 C#에서 시도한 것을 포함하여 실제로 도움이됩니다. 여러 .NET 접근 방식이 동일한 서명을 제공하는 경우 올바른 것일 수도 있습니다 ... –
또한 MD5 다이제스트로 '서명'을 제공하는 경우에만 ... 입력을 제공하지 않아야합니다 데이터 ('msg')? –
@Jon 다이제스트는 완전한 데이터가 아닌 항상 서명됩니다. –