복붙노트

PHP에서 RSA로 텍스트 암호화 및 암호 해독

PHP

PHP에서 RSA로 텍스트 암호화 및 암호 해독

패딩없이 RSA로 텍스트 암호화 / 해독을 제공하는 PHP 5.3 클래스가 있습니까?

나는 개인적이고 공개적인 열쇠, p, q와 모듈러스를 가지고있다.

해결법

  1. ==============================

    1.순수한 PHP RSA 구현 인 phpseclib를 사용할 수 있습니다.

    순수한 PHP RSA 구현 인 phpseclib를 사용할 수 있습니다.

    <?php
    include('Crypt/RSA.php');
    
    $privatekey = file_get_contents('private.key');
    
    $rsa = new Crypt_RSA();
    $rsa->loadKey($privatekey);
    
    $plaintext = new Math_BigInteger('aaaaaa');
    echo $rsa->_exponentiate($plaintext)->toBytes();
    ?>
    
  2. ==============================

    2.

    class MyEncryption
    {
    
        public $pubkey = '...public key here...';
        public $privkey = '...private key here...';
    
        public function encrypt($data)
        {
            if (openssl_public_encrypt($data, $encrypted, $this->pubkey))
                $data = base64_encode($encrypted);
            else
                throw new Exception('Unable to encrypt data. Perhaps it is bigger than the key size?');
    
            return $data;
        }
    
        public function decrypt($data)
        {
            if (openssl_private_decrypt(base64_decode($data), $decrypted, $this->privkey))
                $data = $decrypted;
            else
                $data = '';
    
            return $data;
        }
    }
    
  3. ==============================

    3.2017 년 (또는 이후)에 작성된 심각한 암호화를 적용하려는 응용 프로그램은 RSA를 더 이상 사용하지 않아야합니다. PHP 공개 키 암호화에는 더 나은 옵션이 있습니다.

    2017 년 (또는 이후)에 작성된 심각한 암호화를 적용하려는 응용 프로그램은 RSA를 더 이상 사용하지 않아야합니다. PHP 공개 키 암호화에는 더 나은 옵션이 있습니다.

    사람들이 RSA로 암호화하려고 결정할 때 두 가지 큰 실수가 있습니다.

    $keypair = sodium_crypto_box_keypair();
    $publicKey = sodium_crypto_box_publickey($keypair);
    // ...
    $encrypted = sodium_crypto_box_seal(
        $plaintextMessage,
        $publicKey
    );
    // ...
    $decrypted = sodium_crypto_box_seal_open(
        $encrypted,
        $keypair
    );
    

    간단하고 안전합니다. Libsodium은 PHP 7.2 또는 이전 버전의 PHP 용 PECL에서 사용할 수 있습니다. pure-PHP polyfill이 필요한 경우, paragonie / sodium_compat를 얻으십시오.

    2017 년에 RSA를 사용하는 유일한 이유는 "PECL 확장을 설치할 수 없으므로 libsodium을 사용할 수없고 어떤 이유로 paragonie / sodium_compat를 사용할 수 없기 때문입니다."

    프로토콜은 다음과 같아야합니다.

    직접 구현하는 대신 EasyRSA를 확인하십시오.

  4. ==============================

    4.예. http://jerrywickey.com/test/testJerrysLibrary.php를 확인하십시오.

    예. http://jerrywickey.com/test/testJerrysLibrary.php를 확인하십시오.

    자바 스크립트에서 RSA 암호화뿐 아니라 PHP에서의 RSA 암호화 및 암호 해독에 대한 샘플 코드 예제를 제공합니다.

    10 진수 대신 텍스트를 암호화하려면 기본 변환을해야합니다. 그것은 텍스트를 매우 큰 숫자로 변환합니다. 텍스트는 실제로베이스 63에 쓰고 있습니다. 26 개의 소문자와 26 개의 대문자 + 10 개의 숫자 + 공백 문자. 그 코드도 아래에 있습니다.

    $ GET 매개 변수는 암호화 함수에 대한 키가 들어있는 파일 이름입니다. 알아 내지 않으면 물어보십시오. 내가 도와 줄게.

    나는 어제이 전체 암호화 라이브러리를 게시했지만, Brad Larson은 모드를 죽였고 이런 종류의 것들은 실제로 Stack Overflow가 아니라고 말했습니다. 그러나 위의 링크에서 AJAX에 대한 클라이언트 / 서버 암호화 해독을 수행하기 위해 모든 코드 예제와 전체 함수 라이브러리를 찾을 수 있습니다.

    function RSAencrypt( $num, $GETn){
        if ( file_exists( 'temp/bigprimes'.hash( 'sha256', $GETn).'.php')){
            $t= explode( '>,', file_get_contents('temp/bigprimes'.hash( 'sha256', $GETn).'.php'));
            return JL_powmod( $num, $t[4], $t[10]); 
        }else{
            return false;
        }
    }
    
    function RSAdecrypt( $num, $GETn){
        if ( file_exists( 'temp/bigprimes'.hash( 'sha256', $GETn).'.php')){
            $t= explode( '>,', file_get_contents('temp/bigprimes'.hash( 'sha256', $GETn).'.php'));
            return JL_powmod( $num, $t[8], $t[10]);     
        }else{
            return false;
        }
    }
    
    function JL_powmod( $num, $pow, $mod) {
        if ( function_exists('bcpowmod')) {
            return bcpowmod( $num, $pow, $mod);
        }
        $result= '1';
        do {
            if ( !bccomp( bcmod( $pow, '2'), '1')) {
                $result = bcmod( bcmul( $result, $num), $mod);
            }
           $num = bcmod( bcpow( $num, '2'), $mod);
    
           $pow = bcdiv( $pow, '2');
        } while ( bccomp( $pow, '0'));
        return $result;
    }
    
    function baseToBase ($message, $fromBase, $toBase){
        $from= strlen( $fromBase);
        $b[$from]= $fromBase; 
        $to= strlen( $toBase);
        $b[$to]= $toBase; 
    
        $result= substr( $b[$to], 0, 1);
    
        $f= substr( $b[$to], 1, 1);
    
        $tf= digit( $from, $b[$to]);
    
        for ($i=strlen($message)-1; $i>=0; $i--){
            $result= badd( $result, bmul( digit( strpos( $b[$from], substr( $message, $i, 1)), $b[$to]), $f, $b[$to]), $b[$to]);
            $f= bmul($f, $tf, $b[$to]);
        }
        return $result;
    } 
    
    function digit( $from, $bto){   
        $to= strlen( $bto);
        $b[$to]= $bto; 
    
        $t[0]= intval( $from);
        $i= 0;
        while ( $t[$i] >= intval( $to)){
            if ( !isset( $t[$i+1])){ 
                $t[$i+1]= 0;
            }
            while ( $t[$i] >= intval( $to)){
                $t[$i]= $t[$i] - intval( $to);
                $t[$i+1]++;
            }
            $i++;
        }
    
        $res= '';
        for ( $i=count( $t)-1; $i>=0; $i--){ 
            $res.= substr( $b[$to], $t[$i], 1);
        }
        return $res;
    }   
    
    function badd( $n1, $n2, $nbase){
        $base= strlen( $nbase);
        $b[$base]= $nbase; 
    
        while ( strlen( $n1) < strlen( $n2)){
            $n1= substr( $b[$base], 0, 1) . $n1;
        }
        while ( strlen( $n1) > strlen( $n2)){
            $n2= substr( $b[$base], 0, 1) . $n2;
        }
        $n1= substr( $b[$base], 0, 1) . $n1;    
        $n2= substr( $b[$base], 0, 1) . $n2;
        $m1= array();
        for ( $i=0; $i<strlen( $n1); $i++){
            $m1[$i]= strpos( $b[$base], substr( $n1, (strlen( $n1)-$i-1), 1));
        }   
        $res= array();
        $m2= array();
        for ($i=0; $i<strlen( $n1); $i++){
            $m2[$i]= strpos( $b[$base], substr( $n2, (strlen( $n1)-$i-1), 1));
            $res[$i]= 0;
        }           
        for ($i=0; $i<strlen( $n1)  ; $i++){
            $res[$i]= $m1[$i] + $m2[$i] + $res[$i];
            if ($res[$i] >= $base){
                $res[$i]= $res[$i] - $base;
                $res[$i+1]++;
            }
        }
        $o= '';
        for ($i=0; $i<strlen( $n1); $i++){
            $o= substr( $b[$base], $res[$i], 1).$o;
        }   
        $t= false;
        $o= '';
        for ($i=strlen( $n1)-1; $i>=0; $i--){
            if ($res[$i] > 0 || $t){    
                $o.= substr( $b[$base], $res[$i], 1);
                $t= true;
            }
        }
        return $o;
    }
    function bmul( $n1, $n2, $nbase){
        $base= strlen( $nbase);
        $b[$base]= $nbase; 
    
        $m1= array();
        for ($i=0; $i<strlen( $n1); $i++){
            $m1[$i]= strpos( $b[$base], substr($n1, (strlen( $n1)-$i-1), 1));
        }   
        $m2= array();
        for ($i=0; $i<strlen( $n2); $i++){
            $m2[$i]= strpos( $b[$base], substr($n2, (strlen( $n2)-$i-1), 1));
        }           
        $res= array();
        for ($i=0; $i<strlen( $n1)+strlen( $n2)+2; $i++){
            $res[$i]= 0;
        }
        for ($i=0; $i<strlen( $n1)  ; $i++){
            for ($j=0; $j<strlen( $n2)  ; $j++){
                $res[$i+$j]= ($m1[$i] * $m2[$j]) + $res[$i+$j];
                while ( $res[$i+$j] >= $base){
                    $res[$i+$j]= $res[$i+$j] - $base;
                    $res[$i+$j+1]++;
                }
            }
        }
        $t= false;
        $o= '';
        for ($i=count( $res)-1; $i>=0; $i--){
            if ($res[$i]>0 || $t){  
                $o.= substr( $b[$base], $res[$i], 1);
                $t= true;
            }
        }
        return $o;
    }
    
  5. from https://stackoverflow.com/questions/4484246/encrypt-and-decrypt-text-with-rsa-in-php by cc-by-sa and MIT license