php
  • linux
  • rsa
  • 2011-10-27 30 views 4 likes 
    4

    我想弄清楚在php中使用RSA的一種方法。一個很好的例子在php中使用RSA

    我已經生成公鑰和私鑰與

    ssh-keygen -t rsa 
    

    而現在我想使用那些從我的PHP代碼。下面是我使用的代碼:

    <?php 
    $string=$_GET["i"]; 
    //$fp=fopen ("public.pem","r"); 
    $pub_key='ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtTLDrnS+MyPb/MGHzgcS90DgaoPiDNattlL0Xo7keAjfqz5/yCXU0L8ilkAWIwME5DdXK04MskRtupYPwxPGB4Y7bG/4wvArx5FEgDSq6FUMNvQZ/Vqj13uvcjadLctC2ypAUPRo39qO1IGLEDEWNOS49UgLxzfnr1dZF/Ox5m5UjhOjsALcTiv4eR6ClGcCrAHE7Jp5nL2BwVu46nx3eFlpe7cljQVUOQDgUa5yWaRoJE6qcYgQu1TDo6b/pcAWU1WVu+HzJY4g0aoV2VqamCnl3oyWoPz7ykvxbJbHv7/qTbV+IBNzSx4R7KSppvnPKsrbeiWROvZ4JF84leX+Iw== [email protected]'; 
    
    //fclose($fp); 
    $PK=""; 
    $PK=openssl_get_publickey($pub_key); 
    if (!$PK) { 
        echo "Cannot get public key"; 
        echo $pub_key; 
    } 
    $finaltext=""; 
    openssl_public_encrypt($string,$finaltext,$PK); 
    if (!empty($finaltext)) { 
        openssl_free_key($PK); 
        echo "Encryption OK!"; 
        echo $finaltext; 
        echo "<br/><br/><br/>"; 
    }else{ 
        echo "Cannot Encrypt"; 
    } 
    
    // STEP 2: Decription (Using Private Key) 
    
    //$fp=fopen ("private.pem","r"); 
    $priv_key2='-----BEGIN RSA PRIVATE KEY----- 
    MIIEoAIBAAKCAQEAtTLDrnS+MyPb/MGHzgcS90DgaoPiDNattlL0Xo7keAjfqz5/ 
    yCXU0L8ilkAWIwME5DdXK04MskRtupYPwxPGB4Y7bG/4wvArx5FEgDSq6FUMNvQZ 
    /Vqj13uvcjadLctC2ypAUPRo39qO1IGLEDEWNOS49UgLxzfnr1dZF/Ox5m5UjhOj 
    sALcTiv4eR6ClGcCrAHE7Jp5nL2BwVu46nx3eFlpe7cljQVUOQDgUa5yWaRoJE6q 
    cYgQu1TDo6b/pcAWU1WVu+HzJY4g0aoV2VqamCnl3oyWoPz7ykvxbJbHv7/qTbV+ 
    IBNzSx4R7KSppvnPKsrbeiWROvZ4JF84leX+IwIBIwKCAQAparBiY9Oz6vB0SX4g 
    dqU/1FCNX/kngYbKlp5Bf78xYR0udK9+NIhqOlEMZmt1t4wW6BPspCAovy8GE6vU 
    0VHV1Yns5mS+189+EpNQgREfKWHgrNK9kQ+Btd71iNN4LnWucA6zaxCoMfTC28gD 
    s3LKQuhylB/zBXbI/gW8VPV2fzvFd35iA6QqNKWbjkaRd2y0TOv+RAcnCrYFwV5O 
    LscgjUNS2Hk8dlyXoneB8SqxiFzrXgSTihUelsoPQCj7mZLZ87UFF6sLU85gxoNT 
    tw0VoKD3Ve4poDEkWH28v39MCA/ZOPtNu68oimgVxRWyswvr2X9UvQ8joy2QaQZs 
    0mRLAoGBAN+dc6J8BgzmCr1yUQejU9nPAIFseH0Y+Jd/kHMV0CcSTnJwEak+6H5x 
    aTVQVNVMxdBd3xLG6GLYUWz01ptj3ubkO3qisqeVWvXhp7thHBaj640jV33jUY8p 
    eSrYVqPTDXGb+Jq56Tu0y+9sZeqXJBDeu2vLi7wlK2iAjQ9GHHYdAoGBAM9wtThH 
    LOEveuZ+PwY0qK1IMLsHuF049g3onUk+n6k3oPCBMmnllwCwMOAo2oJEKgFAtEOl 
    I5F9L6KsF7D1IUz1j+Mi578+pIQIndvp/aq1n5iBHSbHjpWhz6B6elcADzNbY5fy 
    FRlE9JshAIAiBmokN+Kb3rLZ4ShMBq0zsRE/AoGAOYBCTlpn9LAupb5PWbxIwvq2 
    /LV+EYoUCbMWg/5Ld8Lg+Nr9OiYehun2e2xtle8rjVn3iHxKYo9lZSkD/BJd45nG 
    JtlhI8dR53SKN39e/oHsHPp1lWZWzQqqIPXNIs/e4rMUCoeTvuVZAw0+x0tvrJEL 
    n2A53+xM/Z1mGd7UHl8CgYARx9UE0uaW9XDvL2R83/EzbJZ2bmBCgTmpa7W10irx 
    P0hPIQRSOEAkoWNGaebX9zbM6En3K2ly3tgyg8eEMkSu0zg4Ck5g2XvQzYnfpleS 
    ShT+cXeG+yl6ijZeNmJB+LDYhC0bpwkfbE97AtQoPW5DnLRVQI9uanJiiix1PvHr 
    iQKBgBj/RiXsDHvVJ28xZPUffZntrAD/TWXMHZWVMFgfsf8Ti0O7ypXqY43+Aoph 
    nfDH6xJFqU9azsiv5xQVY7X1h4+DuOamqdawIV5LtYod+ip0dxduQMfrqLld/p0m 
    E+jAaxvC4b6zqomFnZ9MB9eAzUg9i8UQkc4H3cH/bO6MKPG3 
    -----END RSA PRIVATE KEY----- 
    ';//fread ($fp,8192); 
    //fclose($fp); 
    $PK2=openssl_get_privatekey($priv_key2); 
    $Crypted=openssl_private_decrypt($Data,$Decrypted,$PK2); 
    if (!$Crypted) { 
        $MSG.="<p class='error'>Cannot Decrypt ($CCID).</p>"; 
    }else{ 
        echo "Decrypted Data: " . $Decrypted; 
    } 
    

    最後,應用程序崩潰與:

    Cannot get public key 
    Warning: openssl_public_encrypt() [function.openssl-public-encrypt]: key parameter is not a valid public key in /home/menkaur/public_html/iathao.com/bookmarks/lcn.php on line 13 
    Cannot Encrypt 
    

    我究竟做錯了什麼?

    回答

    7

    openssl使用的關鍵是PEM格式。要生成它,請使用以下代碼:

    openssl genrsa -des3 -out private.pem 1024 
    

    它將生成一個名爲「private.pem」的文件。然後你就可以使用生成的公鑰:

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout 
    

    在PHP如下,你可以使用這些鍵:

    <?php 
    
        $pub = file_get_contents('public.pem'); 
        $pk = openssl_get_publickey($pub); 
        if(!$pk) ... 
    

    然後用你的邏輯做任何你想要的。

    相關問題