signature.verify始终返回false,并从c#代码接收签名

时间:2014-08-11 16:19:46

标签: java c#

我正在从客户端(c#)签名数据并使用java验证服务器端的签名。

这是我的客户代码


          string csrHeaderAndPayload = Convert.ToBase64String(u8.GetBytes(csrHeader)).Replace('+', '-').Replace('/', '_') + "." + Convert.ToBase64String(u8.GetBytes(payload)).Replace('+', '-').Replace('/', '_');
         byte [] output = signCsrData(csrHeaderAndPayload , privateKey);
          return output;

   protected byte[] signCsrData(string csrJSONData, RSAParameters privateKey)
    {
        byte[] csrData = Encoding.UTF8.GetBytes(csrJSONData);
       // byte[] hashData;
        RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
       SHA256Managed hash = new SHA256Managed();

        rsaCSP.ImportParameters(privateKey);

        //hashData = hash.ComputeHash(csrData);

        return rsaCSP.SignData(csrData, hash.GetType());
    }

和服务器端代码: 从客户端发送MOD和EXP,这里用csrHeaderAndPayload验证csrJSONData(从客户端发送签名)。


    BigInteger mod = new BigInteger(Base64.decodeBase64(((String) jpkJson.get(MOD))));
        BigInteger exp = new BigInteger(Base64.decodeBase64(((String) jpkJson.get(EXP))));
        RSAPublicKeySpec rsaKeyspec = new RSAPublicKeySpec(mod, exp);
        publicKey = KeyFactory.getInstance("RSA").generatePublic(rsaKeyspec);

        Signature signature = Signature.getInstance(SHA256withRSA);
        signature.initVerify(publicKey);
        signature.update((csrJSONData).getBytes("UTF-8"));
        if (!signature.verify(this.signature)) {
           return false
        }

此signature.verify始终返回false。 请不要关闭这个问题,已经在其他帖子中看到过解决方案,但没有解决我的问题。

0 个答案:

没有答案