我有一個服務器和一個客戶端。
客戶端可能使用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