PHP で RSA 暗号化された公開キーと秘密キーを生成する方法
オンラインで調べたところ、openssl
を使用できるようですが、読み込んだファイルがわかりません
を呼び出すにはどうすればよいですか。それはphpで? ? ?どの兄弟が私にアドバイスをくれるか分かりません。サンプル コード
またはアドレスを教えてください!
現在、私のシステムではデータベースを使用する必要があるかもしれません
公開鍵と秘密鍵をデータベースに入れる必要があります
これについてはどうすればよいでしょうか?
-----解決策---------
そういうアルゴリズムがあることだけは知っていますが、使ったことはありません。 参考のためにいくつかの情報を保存しました
rsa 非対称暗号化
http://i.laoer.com/php-rsa.html
http://www.zeali net /entry/8
http://pear.php.net/package/Math_BigInteger/download
dh非対称暗号化
http://pear.php. net/package/Crypt_DiffieHellman/download
使用
http://blog.csdn.net/ihefe/archive/2011/01/11/6128386.aspx
------解決策------------------
以下のコンテンツはインターネットからのものです
[url]http://su200909.blog.163.com/blog/static/127808604200910202646745/[/url]
RSA メソッドは、簡単に言えば、セットを生成します数値n、e、dの数。 n と e を使用して平文を暗号化し (平文は n 未満である必要があります)、n と d を使用して暗号文を復号化します。
n、e、d のセットを見つけるのは簡単ですが、n が十分に大きい場合、n と e から d を見つけるのは困難です。ここに RSA のセキュリティがあります。
https について言及する必要はありません。ここで説明するのは、JavaScript と PHP を使用して非 https 環境で RSA 暗号化/復号化を実装する方法です。JavaScript を使用してブラウザ内の情報を暗号化し、PHP を使用してサーバー上の情報を復号化します。
1. JavaScript を使用して暗号化します
RSA の場合、より優れた JavaScript については、[url]http://ohdave.com/rsa/[/url] を参照してください (このページにもキーがあります)生成プログラムのダウンロード)。使い方も簡単です:
1, パラメータを設定します
setMaxDigits(d);
関数のパラメータ d は n の桁数に関係します。関係は
d=n の 16 進数 / 2+3
たとえば、n は 16 進数 16 桁 (2 進数の 125 ~ 128 ビットに相当)、d は 19 に設定されます。
2、キーを設定します
key=new RSAKeyPair(e,d,n);
パラメータ e、d、n は 16 進数で表されます。暗号化には e と n のみが必要で、d は空の文字列です。例:
key=new RSAKeyPair('3d','','a090f4fdaba1c60975fb3b9ea6937a27');
3, 暗号化
ct=encryptedString(key,pt+'x01 ' );
この関数は、平文 pt を暗号文 ct (16 進文字列) に暗号化します。長いメッセージの場合、セグメント化された暗号化が実行されます (ただし、PEAR::Crypt_RSA はそれを認識しません。この問題は以下で解決されます)。
バイト「x01」は、PEAR::Crypt_RSA で必要な終了文字です。 PEAR::Crypt_RSA によって正常に復号化されることが保証される平文のセットの長さ (バイト単位) は次のとおりです:
n 個の 16 進数字/2 ~ 3
キー (一度に 2 個) 13 バイトの暗号化が可能です (キーと平文によっては 14 バイトも暗号化できる可能性があります)。
2 番目に、PHP を使用して復号化します。
PEAR::Crypt_RSA のインストールは非常に簡単なので、ここでは説明しません。
1. 数学ライブラリを開きます
require_once('Crypt/RSA.php'); // 通常、これはパスです
$math_obj = &Crypt_RSA_MathLoader::loadWrapper();
PHP の数学ライブラリには、GMP、BigInt、BCMath が含まれます。 loadWrapper にパラメータが指定されていない場合、ロードされた数学ライブラリがこの順序で選択されます (それぞれ Crypt_RSA_Math_GMP クラス、Crypt_RSA_Math_BigInt クラス、および Crypt_RSA_Math_BCMath クラスに対応します)。 BCMath は PHP のデフォルト設定ですが、GMP よりもはるかに遅いです。 BigInt については詳しくないので、何とも言えません。
2、キーをロード
$dd = $math_obj->int2bin('0x'.$d);
$nn = $math_obj->int2bin(' 0x' .$n);
$pk = new Crypt_RSA_Key($nn, $dd, 'private');
$rsa_obj = new Crypt_RSA;
$rsa_obj->setParams(array (' dec_key' => $pk));
3, 復号化
$pt = $rsa_obj->decryptBinary($math_obj->int2bin('0x'.$ct )) ;
PEAR::Crypt_RSA は 16 進数のキーを使用でき、16 進数の暗号文を復号化することもできます。ただし、16 進数を内部形式に変換できるように、int2bin のコードを Crypt_RSA_Math_BCMath クラス用に変更する必要があります。
もちろん、10 進数のキー/暗号文の場合は、「0x」プレフィックスを追加する必要はありません。
Crypt_RSA_Math_BCMath::int2bin() への変更は、関数の先頭に次のように追加することです:
$p=substr($num,0,2);
if($ p= ='0x'||$p=='0X'){
$len=strlen($num);
$result = 0;
$factor = 1;
for( $i =$len-1;$i>=2;$i--){
$result=bcadd($result,bcmul(hexdec($num[$i]),$factor));
$ Factor=bcmul($factor,16);
}
$num=$result;
}
第三に、JavaScript 暗号化関数の無駄の問題を解決します
JavaScriptのencryptedString ()関数は長い情報を部分的に暗号化し、暗号文はスペースで段落に区切られます。 Crypt_RSA クラスの decryptBinary() 関数はこれに適応できません。 JavaScript の暗号化機能を最大限に活用するには、Crypt_RSA クラスに関数を追加するだけです:
function decryptString($s, $key = null)
{
$result = '';
if($key==null)
$key = $this->_dec_key;
$exp = $this->math_obj->bin2int($key->getExponent());
$modulus = $this->_math_obj->bin2int($key->getModulus()) ;
$chunk_len = $key->getKeyLength() - 1;
$block_len = (int) ceil($chunk_len / 8);
$radix=10;
if (substr($s,0,2)=='0x'){
$radix=16;
$s=substr($s,2);
}
$blocks = 爆発(" ",$s);
for($i = 0; $i < count($blocks); ++$i){
$enc_data=$blocks[$i];
if ($radix == 16)
$enc_data='0x'.$enc_data;
$enc_data=$this->gt;_math_obj->int2bin($enc_data);
$data_len = strlen($enc_data);
$curr_pos = 0;
$bit_pos = 0;
$plain_data = $this->_math_obj->bin2int(" ");