Я нашел решение, для достижения которого вам сначала нужно преобразовать формат открытого ключа, так как точка сети использует своего рода различные ключи в качестве входных данных.
Я не знаю других способов, но мы можем получить ключ формата dot net, используя Java-код, который вам нужно запустить только один раз, чтобы сгенерировать открытый ключ RSA, дружественный для dot net.(это рекомендуется только в том случае, если данная публикация не меняется быстро, например, в случае выставления счетов в Android Market)
следующий код Java работал для меня
public static DotNetRSA GenerateDotNetKey(String base64PubKey)
throws IOException, NoSuchAlgorithmException,
InvalidKeySpecException {
/*
* String base64PubKey -
* Is a Key retrieved from Google Checkout Merchant Account
*/
BASE64Decoder decoder = new BASE64Decoder();
byte[] publicKeyBytes = decoder.decodeBuffer(base64PubKey);
EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
RSAPublicKey publicKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(publicKeySpec);
byte[] modulusBytes = publicKey.getModulus().toByteArray();
byte[] exponentBytes = publicKey.getPublicExponent().toByteArray();
modulusBytes = stripLeadingZeros(modulusBytes);
BASE64Encoder encoder = new BASE64Encoder();
String modulusB64 = encoder.encode(modulusBytes);
String exponentB64 = encoder.encode(exponentBytes);
return new DotNetRSA(modulusB64, exponentB64);
}
private static byte[] stripLeadingZeros(byte[] a) {
int lastZero = -1;
for (int i = 0; i < a.length; i++) {
if (a[i] == 0) {
lastZero = i;
}
else {
break;
}
}
lastZero++;
byte[] result = new byte[a.length - lastZero];
System.arraycopy(a, lastZero, result, 0, result.length);
return result;
}
Теперь, чтобы проверить ЦифровоеПодпись, вы можете использовать следующий код в своей программе dot net (c #), при условии, что GCHO_PUB_KEY_EXP - это ваш экспонент, а GCHO_PUB_KEY_MOD - ваш модуль, извлеченный из приведенного выше Java-кода
public static bool VerifyDataSingature(string data, string sign)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
RSAParameters rsaKeyInfo = new RSAParameters()
{
Exponent = Convert.FromBase64String(GCHO_PUB_KEY_EXP),
Modulus = Convert.FromBase64String(GCHO_PUB_KEY_MOD)
};
rsa.ImportParameters(rsaKeyInfo);
return rsa.VerifyData(Encoding.ASCII.GetBytes(data),
"SHA1",
Convert.FromBase64String(sign));
}
}
Я надеюсь, что он будет работать для всех, кто работал для меня,Спасибо
Кредит переходит на Код проекта Artical