我有一个服务器和一个客户端。
客户端可能使用java,php等不同的技术。
服务器代码是用java编写的。
我在服务器端做的是获取客户端公钥的指数和模数字节,并生成客户端的公钥。 要生成客户端的公钥我使用下面的代码:
RSA公钥生成问题(PHP/Java集成)
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, clientPublickey);
scrambled = cipher.doFinal(buffer);
服务器信息
我:
RSAPublicKeySpec spec = new RSAPublicKeySpec(modulusBigInt,exponentBigInt);
keyFactory = KeyFactory.getInstance("RSA", "BC");
RSAPublicKey clientPublicKey = (RSAPublicKey) keyFactory.generatePublic(spec);
要我使用下面的代码使用客户端的公钥加密数据使用RSA-1024来加密AES密钥。 我正在使用RSA/ECB/PKCS1Padding算法。而且我也确保所有的客户端都在他们的代码中考虑1个填充。
客户端 - 1(JAVA)
如果客户端也比Java公钥取得成功,从指数和客户端的公钥模量产生。 我使用下面的代码来生成密钥对客户端的RSA密钥的..
keyPairGene = KeyPairGenerator.getInstance("RSA");
keyPairGene.initialize(1024);
KeyPair keyPair = keyPairGene.genKeyPair();
RSAPublicKey clientPublickey = (RSAPublicKey) keyPair.getPublic();
客户-2(PHP)
现在的问题是,如果客户是在PHP ..比公钥是成功生成,但是当我尝试使用该公钥加密时,当我在服务器中使用默认提供程序时发生错误的填充异常。 我使用波纹管代码来生成密钥对客户端的RSA密钥的..
$options = array('private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
'config' => realpath(__DIR__) . '/openssl.cnf');
#Generates New Private/Public Key Pair
$pkGenerate = openssl_pkey_new($options);
#Get Client Private Key
openssl_pkey_export($pkGenerate, $PrivateKey, NULL, $options);
#Get Client Public Key
$keyData = openssl_pkey_get_details($pkGenerate);
比我还试过BC提供商 ...它给了我下面的异常:
org.bouncycastle.crypto.DataLengthException: input too large for RSA cipher.
我我没有得到什么问题发生时,我试图从指数和模数当客户端在PHP中生成公钥... 如果客户端是在Java比它没有问题....并且完美地工作..
任何类型的帮助是值得欢迎...
注意: 我从调试代码观察到的是什么,在服务器端 客户端的公钥模数字节的位长为1020之间变化到1023 ...它从来没有在1024到达,虽然我们有定义大小1024
编辑您的问题并且添加相关的代码部分。 – Robert
@Robert谢谢...编辑... –
似乎你的问题是关于PHP代码,所以包括它 – pedrofb