从 VB.Net 设置模数和指数到 Android/Java

问题描述 投票:0回答:2

我有这个

RSA public key
,它是在
VB.Net
我的服务器中生成的。

<RSAKeyValue><Modulus>tv0tzng4pW7erDo2ke/Ku9TGKRukAzx+lihZVblIOE6GWIoiwlILOANeVliZLi1s5qMsXEUA4GV2woC1zFdhJvfFja8Nacl4I3CJ4JYmGqcSZinWKgo3MJdoEqFl9NliF4wTYLow3GYoUh03WxoeArozV1S03drP898b9PdbjPY+ji4jpZHJWnbfg+qWSziF1Q/pSAxpzabeoamz1+ekqlhuxZavQUl+hIhx/quHqy3ybFWcX6yE5NKeY1fzX3L7</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>

我想将此值设置为我的 Android RSA 公钥,但使用此代码进行转换并不能正确设置密钥。

RSAPublicKeySpec spec = new RSAPublicKeySpec(new BigInteger("tv0tzng4pW7erDo2ke/Ku9TGKRukAzx+lihZVblIOE6GWIoiwlILOANeVliZLi1s5qMsXEUA4GV2woC1zFdhJvfFja8Nacl4I3CJ4JYmGqcSZinWKgo3MJdoEqFl9NliF4wTYLow3GYoUh03WxoeArozV1S03drP898b9PdbjPY+ji4jpZHJWnbfg+qWSziF1Q/pSAxpzabeoamz1+ekqlhuxZavQUl+hIhx/quHqy3ybFWcX6yE5NKeY1fzX3L7".getBytes())
,new BigInteger("AQAB".getBytes()));

编辑:我也尝试过这段代码,但没有成功。

android vb.net rsa public-key-encryption modulus
2个回答
1
投票

首先,您必须从 Base64 解码模数和指数。

其次,你必须为

BigInteger
使用不同的构造函数:

BigInteger(int signum, byte[] magnitude)

signum
为一,因为这两个值都不是 2 补码表示法并且始终为正。


0
投票

我已经编写了一段代码,利用 JDK 1.8,使用从 VB.Net 生成的模数和指数来生成 Base64 公钥。请评估其与预期用例的相关性。

 byte[] modulusBytes = Base64.getDecoder().decode("xYWg56Z+F/QOsKgFJE/gMA3j/emq/cVhxNQt4nWmxVWUdV1f9loHq6PK8g2+yRDYwwPmJT2HiafuyE/noJGKlPWNqW2/io6IZbuAvdpZlv4iHQzF/4z6i1wQf/VnFCGQ/ov24sfJgk5ZwqX1CJQcvZJsAmxBB9lEmG95Hx7KAbU=");
byte[] exponentBytes = Base64.getDecoder().decode("AQAB");

BigInteger modulus = new BigInteger(1, modulusBytes);
BigInteger exponent = new BigInteger(1, exponentBytes);

RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
        
PublicKey pubKey = fact.generatePublic(rsaPubKey);

byte[] publicBytes = Base64.getEncoder().encode(pubKey.toString().getBytes());
System.out.println("Public Key: " + new String(publicBytes));

© www.soinside.com 2019 - 2024. All rights reserved.