des 암호 화 복호화 코드

2950 단어
암호 화 알고리즘
데이터 암호 화의 기본 적 인 과정 은 원래 명문 이 었 던 파일 이나 데 이 터 를 특정한 알고리즘 에 따라 처리 하여 읽 을 수 없 는 코드 로 만 드 는 것 이다. 흔히 '비밀문서' 라 고 부 르 는데 해당 하 는 키 를 입력 한 후에 만 원래 내용 을 표시 할 수 있 고 이런 길 을 통 해 데 이 터 를 불법 자 에 게 훔 치지 않 고 읽 히 지 않도록 보호 하 는 목적 을 달성 할 수 있다.이 과정의 역 과정 은 복호화 로 이 인 코딩 정 보 를 원래 데이터 로 바 꾸 는 과정 이다.
분류 (대칭, 비대 칭)
대칭 암호 화 는 암호 화 와 복호화 가 같은 키 를 사용 하 는 것 으로 흔히 'Session Key' 라 고 부 르 는 암호 화 기술 은 현재 광범 위 하 게 사용 되 고 있다. 예 를 들 어 미국 정부 가 사용 하 는 DES 암호 화 기준 은 전형 적 인 '대칭 식' 암호 화 법 으로 Session Key 의 길 이 는 56Bits 이다.비대 칭 암호 화 는 암호 화 와 복호화 에 사용 되 는 키 가 같은 키 가 아 닙 니 다. 보통 두 개의 키 가 있 습 니 다. '공개 키' 와 '비밀 키' 라 고 부 릅 니 다. 두 개 는 반드시 짝 을 지어 사용 해 야 합 니 다. 그렇지 않 으 면 암호 화 파일 을 열 수 없습니다.이곳 의 '공개 키' 는 대외 적 으로 발표 할 수 있 는 것 을 말 하 는데 '비밀 키' 는 할 수 없고 소지 자 한 사람 만 알 수 있다.대칭 적 인 암호 화 방법 이 네트워크 에서 암호 화 파일 을 전송 하 는 것 이 라면 키 를 상대방 에 게 알 리 기 어렵 고 어떤 방법 으로 든 들 을 수 있 기 때문이다.비대 칭 암호 화 방법 은 두 개의 키 가 있 고 그 중의 '공개 키' 는 공개 할 수 있 으 며 다른 사람 이 알 까 봐 두 렵 지 않 습 니 다. 받 는 사람 이 비밀 을 풀 때 자신의 비밀 키 를 사용 하면 키 의 전송 안전성 문 제 를 잘 피 할 수 있 습 니 다.
php des 암호 화 복호화 코드
key = $key;
        if ($iv == 0) {
            $this->iv = $key;
        } else {
            $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
        }
    }

    function encrypt($str) {
        //  ,           
        $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
        $str = $this->pkcs5Pad($str, $size);
        return strtoupper(bin2hex(mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv)));
    }

    function decrypt($str) {
        //  
        $strBin = $this->hex2bin(strtolower($str));
        $str = mcrypt_cbc(MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv);
        $str = $this->pkcs5Unpad($str);
        return $str;
    }

    function hex2bin($hexData) {
        $binData = "";
        for ($i = 0; $i < strlen($hexData); $i += 2) {
            $binData .= chr(hexdec(substr($hexData, $i, 2)));
        }
        return $binData;
    }

    function pkcs5Pad($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

    function pkcs5Unpad($text) {
        $pad = ord($text{strlen($text) - 1});
        if ($pad > strlen($text)) {
            return false;
        }

        if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
            return false;
        }

        return substr($text, 0, -1 * $pad);
    }

}

//        :
// $str = '12345678';
// $key = '1234abcd';
// $crypt = new DES($key);
// $mstr = $crypt->encrypt($str);
// $str = $crypt->decrypt($mstr);
// echo  $str.' <=> '.$mstr

좋은 웹페이지 즐겨찾기