将php生成的公钥转换为java公钥

uujelgoq  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(428)

我是android新手,正在开发一个基于客户机-服务器的应用程序。这里我需要使用rsa算法进行加密/解密。
场景是:1.服务器必须创建一个私有/公共密钥对(php)并将公钥发送给客户端(android应用程序)2.客户端应该使用该公钥加密数据并发送给服务器3.现在服务器必须使用私钥解密。
在php中,我使用“phpseclib”创建密钥对。
这是编码:
服务器.php:

<?PHP
include 'Crypt/RSA.php';
$rsa = new Crypt_RSA();
extract($rsa->createKey(1024));
echo $publickey;
?>

生成的公钥:
migfma0gcsqgsib3dqebaquaa4gnacbiqkbgqdlz4yao1ftolc6nijbctv5ivnw f6mxcem5+rxy+29axcpmwhlm9oesifw6ozrrendyqwy+kvzcj2bwyneayjxs wopvqt2xscplwzonqgm+dnayjxeeofgu5di63fwdigv4m2ph1vmme6684sbzu1 hhjhuhsx2eibbr0/lqidaqab
现在在java中,我成功地接收到了这个公钥并将其存储在一个字符串中。
编码:

protected String doInBackground(Void... params) 
{
    try
    {
    URL url=new URL("http://10.0.2.2/Samples/Server.php");
    URLConnection con=url.openConnection();
    con.setDoOutput(true);
    BufferedReader ip=new BufferedReader(new InputStreamReader(con.getInputStream()));
    String tmp,res="";

    while((tmp=ip.readLine())!=null)
    {
        res+=tmp;

    }

    return res; //res contains the public key

    }
    catch(Exception e)
    {
        return new String("Exception : "+e.getMessage());
    }

}

我在java中使用bouncy castle provider(bcprov-jdk15on-151)。
现在我不知道如何将这个字符串转换成rsa公钥。
请推荐一些代码片段?如果代码需要改进和修正,请修正它。
谢谢。。。

6yt4nkrj

6yt4nkrj1#

假设您正确下载了密钥,您可以在中使用密钥 base 64 encoding 生成一个 java.security.PublicKey 代码如下:

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;

public class ParseRsaPublicKey {

    public static void main(String[] args) throws Exception {
        String yourKeyB64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLz4yAo1FTOLc6nijBCTv5iVnW\n"+
                "F6MxCeM5+RxY+29AXcpMWhlM9oES3ESIfWw6OzrrENDyqwY+kVzCj2bWYnEAyJXs\n"+
                "WOpvqT2XSCPplwZOnQQGm+DnAYJXEeOfgU5DI63fwdiGv4M2ph1VMMe6684sBZu1\n"+
                "HhJHuhsX2eibBR0/lQIDAQAB";
        // create the key factory
        KeyFactory kFactory = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
        // decode base64 of your key
        byte yourKey[] =  Base64.decode(yourKeyB64);
        // generate the public key
        X509EncodedKeySpec spec =  new X509EncodedKeySpec(yourKey);
        PublicKey publicKey = (PublicKey) kFactory.generatePublic(spec);
        // now you can for example cipher some data with your key
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] cipherData = cipher.doFinal("someData".getBytes());
        System.out.println(new String(cipherData));
    }

}

希望这有帮助,

相关问题