所以我已经搜索了一段时间并且无法真正找到我需要的东西(因为出现的每个结果都是关于签署实际的包)。所以基本上我所做的是使用会话管理器保护Web服务,并且为了获得会话号,需要将GUID发送到WebService。在iOS方面,我们能够得到这个设置(因为开发WebService的团队有一个iOS开发人员可以提供帮助)但是因为那个团队中没有人或者这里有很多Android经验的人都在努力想如何做同样的事情。下面是我到目前为止所尝试的内容,但是生成的GUID由一些奇怪的字符组成,并且不起作用,所以我一直在寻找其他选项。
String password = "password";
String text = "545048";
KeyStore keyStore = KeyStore.getInstance("pkcs12");
InputStream inputStream = activity.getResources().openRawResource(R.raw.am_client);
keyStore.load(inputStream, password.toCharArray());
String alias = keyStore.aliases().nextElement();
PrivateKey privateKey = (PrivateKey)keyStore.getKey(alias, password.toCharArray());
X509Certificate certificate = (X509Certificate)keyStore.getCertificate(alias);
//Sign Data
byte[] dataToSign = text.getBytes("UTF-8");
Signature signature1 = Signature.getInstance("SHA1WithRSA");
signature1.initSign(privateKey);
signature1.update(dataToSign);
byte[] signedData = signature1.sign();
String signed = new String(signedData, "UTF-8");
Log.d("MESSAGE", "string = " + signed);
//This is what comes up in the Log: ��m(N� �xp�r���K�V>G3b���M��W08���6#�͞�+�/�]�,�o���N"�$��uVa�ƾ�~��
答案 0 :(得分:2)
我发现了问题,代码很好但是当我将文本转换为字节数组时,我使用了错误的格式(UTF-8),因为服务正在使用(UTF-16LE)。只需要深入研究服务就能找到解决方案。