0
我正在开发wp8应用程序。我在第一次登录请求时向服务器发送公钥。在响应服务器发送令牌(简单的base64字符串,大约1200-1300个字符),我需要使用私钥签名并在下一个请求中发送回服务器。现在,服务器验证该令牌并在第一次请求中发送相应的公钥。我有工作的java代码,这是上面的事情。如何在wp8中用C#签署数据
String privateKey = sharedPref.getString("privateKey", "");
byte [] decoded = Base64.decode(privateKey, Base64.NO_WRAP);
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decoded);
PrivateKey privateKeyNew = kf.generatePrivate(keySpec);
String tokenSp = sharedPref.getString("token", "");
byte[] tokenBytes = tokenSp.getBytes();
Signature dsa = Signature.getInstance("SHA1withRSA");
dsa.initSign(privateKeyNew);
dsa.update(tokenBytes);
byte[] signedData = dsa.sign();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(tokenBytes);
baos.write(signedData);
byte[] finalout = baos.toByteArray();
signedToken = new String(Base64.encode(finalout, 0, finalout.length, Base64.NO_WRAP));
我想在c#中实现相同。我写的代码是:
UnicodeEncoding ByteConverter = new UnicodeEncoding();
CspParameters parameters = new CspParameters();
parameters.KeyContainerName = "MyContainer";
RSACryptoServiceProvider obj = new RSACryptoServiceProvider(parameters);
byte[] dataToEncrypt=ByteConverter.GetBytes(s[0]);
byte[] SignedData=obj.SignData(dataToEncrypt, "SHA256");
MemoryStream stream = new MemoryStream();
stream.Write(dataToEncrypt,0,dataToEncrypt.Count());
stream.Write(SignedData,0,SignedData.Count());
byte[] finalBytesToSend = stream.ToArray();
string s2 = Convert.ToBase64String(finalBytesToSend);
return s2;
而对于服务器我送“SHA256”作为公共密钥verify.Is它更正一下,我在C#中做了什么?
虽然签名存在WP8 API – Vaibhav
这是标准的.NET框架的代码没有名为创建方法()在abstarct SHA1类。你可以尝试'新的System.Security.Cryptography.SHA1Managed()' –
SHA1,SHA1managed,SHA256,SHA256Managed在那里。但他们没有创建方法。我想在Windows Phone 8中实现。 – Vaibhav