如何为AS3 PKCS1展开包装Java RSA密钥?

时间:2019-04-20 10:52:16

标签: java rsa biginteger pkcs#1 as3crypto

我正在尝试对Flash应用程序进行逆向工程以应对挑战和知识。

我必须将RSA编码的BigInteger发送给客户端,客户端将在使用前对其进行验证。

我的问题是,当客户端解压BigInteger时,出现以下错误消息:

PKCS#1 unpad: i=1, expected b[i]==[0,1,2], got b[i]=xx

(其中 xx 是一个十六进制数字)

这是我在Java服务器端所做的:

this.g = new BigInteger("hexString #1", 16);
this.n = new BigInteger("hexString #2", 16);

this.privateKey = generateRandomBI();
this.secretKey = this.g.modPow(this.privateKey, this.n);

KeyFactory factory = KeyFactory.getInstance("RSA");

RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(
    new BigInteger("hexString #3", 16),
    BigInteger.valueOf(65537)
);

RSAPublicKey publicKey = (RSAPublicKey) factory.generatePublic(publicKeySpec);
SecretKey secretKeySpec = new SecretKeySpec(this.secretKey.toByteArray(), "RSA");

Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding");
rsa.init(Cipher.WRAP_MODE, publicKey);
byte[] encryptedSecretKey = rsa.wrap(secretKeySpec);

然后我将 encryptedSecretKey 发送给客户端,客户端会收到上述错误。

这是客户端:

var rsa:RSAKey = new RSAKey(
    new BigInteger("hexString #3"),
    65537
);
var decoded:ByteArray = new ByteArray();
rsa.verify(key, decoded, key.length);

是我用Java发送的内容。

我无法修改客户端(AS3)端,并且我已经尝试使用所有其他 RSA / ECB / 算法,但是生成的密钥与它们不兼容。

如果需要,我可以发布更多的客户端和服务器代码。 我使用的 hexString (#1,#2和#3)来自AS3客户端。 AS3 RSAKey类来自as3-crypto

请帮我提供一些线索吗? 非常感谢您,祝您愉快!

关于, s间

0 个答案:

没有答案