PHP と GMP を使用して大きな整数の RSA 暗号化および復号化アルゴリズムを実行する方法
#RSA 暗号化アルゴリズムは、データ セキュリティの分野で広く使用されている非対称暗号化アルゴリズムです。これは、2 つの特に大きな素数といくつかの単純な数学演算に基づいて、公開キー暗号化と秘密キー復号化のプロセスを実装します。 PHP言語では、GMP(GNU Multiple Precision)ライブラリにより大きな整数の計算を実現でき、RSAアルゴリズムを組み合わせることで暗号化・復号化機能を実現できます。この記事では、PHP および GMP ライブラリを使用して大きな整数の RSA 暗号化および復号化アルゴリズムを実装する方法を紹介し、対応するコード例を示します。 1. RSA 公開キーと秘密キーのペアの生成RSA アルゴリズムでは、公開キーと秘密キーの両方が大きな素数のペアから生成されます。まず、2 つの大きな素数 $p$ と $q$ を生成する必要があります。function generatePrime($bits) { do { $num = gmp_strval(gmp_random_bits($bits)); } while (!gmp_prob_prime($num)); return gmp_init($num); } $bits = 1024; // 生成的素数位数 $p = generatePrime($bits); $q = generatePrime($bits);
$n = gmp_mul($p, $q); $phi_n = gmp_mul(gmp_sub($p, 1), gmp_sub($q, 1));
$e = gmp_init(65537); // 公钥指数(一般固定为65537)
function extendedEuclidean($a, $b) { if (gmp_cmp($b, 0) === 0) { return ['x' => gmp_init(1), 'y' => gmp_init(0)]; } $result = extendedEuclidean($b, gmp_mod($a, $b)); return [ 'x' => $result['y'], 'y' => gmp_sub($result['x'], gmp_mul(gmp_div_q($a, $b), $result['y'])) ]; } $d = extendedEuclidean($e, $phi_n)['x'];
function rsaEncrypt($msg, $n, $e) { $msg = gmp_init($msg); $result = gmp_powm($msg, $e, $n); return gmp_strval($result); } function rsaDecrypt($cipher, $n, $d) { $cipher = gmp_init($cipher); $result = gmp_powm($cipher, $d, $n); return gmp_strval($result); }
function generatePrime($bits) { do { $num = gmp_strval(gmp_random_bits($bits)); } while (!gmp_prob_prime($num)); return gmp_init($num); } function extendedEuclidean($a, $b) { if (gmp_cmp($b, 0) === 0) { return ['x' => gmp_init(1), 'y' => gmp_init(0)]; } $result = extendedEuclidean($b, gmp_mod($a, $b)); return [ 'x' => $result['y'], 'y' => gmp_sub($result['x'], gmp_mul(gmp_div_q($a, $b), $result['y'])) ]; } function rsaEncrypt($msg, $n, $e) { $msg = gmp_init($msg); $result = gmp_powm($msg, $e, $n); return gmp_strval($result); } function rsaDecrypt($cipher, $n, $d) { $cipher = gmp_init($cipher); $result = gmp_powm($cipher, $d, $n); return gmp_strval($result); } $bits = 1024; // 生成的素数位数 $p = generatePrime($bits); $q = generatePrime($bits); $n = gmp_mul($p, $q); $phi_n = gmp_mul(gmp_sub($p, 1), gmp_sub($q, 1)); $e = gmp_init(65537); // 公钥指数(一般固定为65537) $d = extendedEuclidean($e, $phi_n)['x']; $msg = 'Hello, RSA!'; $cipher = rsaEncrypt($msg, $n, $e); $decryptedMsg = rsaDecrypt($cipher, $n, $d); echo "明文消息:" . $msg . " "; echo "加密后的密文:" . $cipher . " "; echo "解密后的明文消息:" . $decryptedMsg . " ";
以上がPHP と GMP を使用して大きな整数の RSA 暗号化および復号化アルゴリズムを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。