RSAPublicKeySpec使用不正确的公共指数

时间:2018-04-17 18:03:28

标签: java android rsa

我有一个应用程序,我正在尝试验证来自服务器的消息。
服务器有一个硬编码到应用程序中的PublicKey(我很确定这是不好的做法:D)
PublicKey应该具有PublicExponent 65537但是:
在我构建像这样的PublicKey之后:

public final BigInteger SERVERPUBLICMODULUS  = new BigInteger("585352124868136218330831553543607739238735113950016114193938034701736199925409455053211111863758250978758580006346728108068561623572034750175970004285976571448839656944312080934498460089635116551195737654340987552642235390716726811524319123440182761448502305025648340126814187197119706150590735102379522148725529405206804279740946498599235787109564589216771055555765103524198985067612199015223027891213426671414998222990408525802980665194685335366189506680921601969653161489663272536287015718060876723206731675024933769127072320421340768809682931111438498808988296994136351815074704882404764784569198940678951810282137416726132782522339680859088812065439336462279804160486797206484868568193884876358303241922641169638921345645695366315766297920377540928140588600510127137452142007228780413701770318647449619095062936067898132972886757857117122112127897815277632243654354128151178020609996416843831820192604499281309292471448576479059066208168768001237982178789829580135181583231402151995533272395920885845434741909184667000938169021664998585444975518543857977779847036933915866487789193811270497231176367318526347820961093225993668635081421659697961645700731521647269511498520149006778427640890937459187216740570746326994203438962011");
public final BigInteger SERVERPUBLICEXPONENT = new BigInteger("65537");

public PublicKey getServerPublicKey() throws NoSuchAlgorithmException {
        try {
            RSAPublicKeySpec spec = new RSAPublicKeySpec(SERVERPUBLICMODULUS,SERVERPUBLICEXPONENT);
            KeyFactory kf = KeyFactory.getInstance(HANDSHAKEALGORYTHM);

            return kf.generatePublic(spec);
        } catch (InvalidKeySpecException e) {
            Log.wtf(getClass().getName(), e);
        }
        return null;
    }

当我查看返回的密钥时,我会得到这个:

OpenSSLRSAPublicKey{modulus=b17c9b99ee5b2fac58155e4f3360e03842df3353c7852fe05cf4f52c92df26a6bf86645dcc13f6f40210459f077af7b4159f21b70c8457c47fe580bacb82d16c80efcdab911cf9d308ba8603ee8d27ae3ad574bc54a8e6376f1c5ce9ec74766afad8c7b18a947d46cc2bb6d6aa91d4327421fa1ab66ba02b1e8055e37fc74e22699cc05aba0efec3d088aa8910fe5f945b0825c0df96182b07129bc09274b91d0eb7a153f45bab066b1d4f0675a7c19e4472915e8aa8736e33961f8a1ae20de6df46e6676ce37b3ebc7f28a2b71e51f7fb80f502295294ad5f531d3d1f5cfefb4f96af4606b254460307b761ee4750d8ceb891161fb5fcc737f8f950ba92b849,publicExponent=10001}

因为我将其指定为65537,所以对我来说似乎是publicExponent=10001 显然,密钥不起作用(意味着我的所有verifys都失败了)。

1 个答案:

答案 0 :(得分:0)

OpenSSL显示编码为十六进制的值。十六进制值10001等于十进制65537。如果模数也正确,您可以检查转换器