【问题标题】:Convert PHP generated Public Key into Java Public Key将 PHP 生成的公钥转换为 Java 公钥
【发布时间】:2015-01-15 15:08:17
【问题描述】:

我是 Android 新手,我正在开发基于客户端服务器的应用程序。这里我需要使用 RSA 算法进行加密/解密。

场景是: 1.服务器必须创建一个私钥/公钥对(PHP)并将公钥发送给客户端(Android应用程序) 2.客户端应使用该公钥加密数据并发送到服务器 3.现在服务器必须使用私钥解密。

在 PHP 中,我使用 'PhpSecLib' 创建密钥对。

这是编码:

Server.php:

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

生成的公钥:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLz4yAo1FTOLc6nijBCTv5iVnW F6MxCeM5+RxY+29AXcpMWhlM9oES3ESIfWw6OzrrENDyqwY+kVzCj2bWYnEAyJXs WOpvqT2XSCPplwZOnQQGm+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 中使用 充气城堡提供程序 (bcprov-jdk15on-151)

现在我不知道如何将此字符串转换为 RSA 公钥。

请建议一些代码sn-ps?如果代码需要改进和更正,请更正它。

谢谢...

【问题讨论】:

    标签: java php rsa bouncycastle phpseclib


    【解决方案1】:

    假设您正确下载了密钥,您可以使用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));
        }
    
    }
    

    希望对你有帮助,

    【讨论】:

    • @Jeeva 不客气 :),如果答案能帮助你记住接受它 :)
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多