У меня есть следующий код подписи данных в C#Java эквивалент .NET RSACryptoServiceProvider с SHA-1
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string PrivateKeyText = "<RSAKeyValue><Modulus>....</D></RSAKeyValue>";
rsa.FromXmlString(PrivateKeyText);
string data = "my data";
byte[] SignedByteData = rsa.SignData(Encoding.UTF8.GetBytes(data), new SHA1CryptoServiceProvider());
и я хочу воспроизвести тот же код в Java (Android):
String modulusElem = "...";
String expElem = "...";
byte[] expBytes = Base64.decode(expElem, Base64.DEFAULT);
byte[] modulusBytes = Base64.decode(modulusElem, Base64.DEFAULT);
BigInteger modulus = new BigInteger(1, modulusBytes);
BigInteger exponent = new BigInteger(1, expBytes);
try {
KeyFactory factory = KeyFactory.getInstance("RSA");
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
String data = "my data";
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] hashedData = md.digest(data.getBytes("UTF-8"));
RSAPublicKeySpec pubSpec = new RSAPublicKeySpec(modulus, exponent);
PublicKey publicKey = factory.generatePublic(pubSpec);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] SignedByteData = cipher.doFinal(hashedData);
} catch (Exception e){
}
Но Я получаю несогласованные выходные байтовые массивы. Где я ошибаюсь и каково должно быть преобразование, используемое в Cipher.getInstance(...)
?
Проверьте это http://stackoverflow.com/questions/18089923/translating-c-sharp-rsacryptoserviceprovider-into-java-code –
@ ZohraKhan, я написал код Java с этой должности в первую очередь. Метод, используемый в этом сообщении, - «Шифровать», в то время как я использую SignData, у которого встроена функция хэширования. –