문제

쓰려고 부부의 함수를 암호화 또는 암호 해독 파일을 사용하는 클래스는 여기에서 찾을 시도하고 이를 수행:

http://www.itnewb.com/v/PHP-Encryption-Decryption-Using-the-MCrypt-Library-libmcrypt

암호화 기능을 아래 작동하는 것 같다는 점에서 나타나는 파일을 암호화하고 장소에서 그것이 의도한 디렉토리에 있습니다.내가 하려고 해독하는 파일이 지금,그것은 그냥 죽는 메시지와 함께"을 완료하지 못했 암호 해독"(코딩기...)에 아무것도 없 php 오류 로그를,그래서는 이유를 모르겠어요 그것은 실패하지만,mcrypt 은 완전히 새로운 나에게 나보다 더 기울어 내가 뭔가 잘못된 일을 해요 여기...

여기에는 이 기능:

//ENCRYPT FILE
    function encryptFile() {
        global $cryptastic;
        $pass = PGPPASS;
        $salt = PGPSALT;
        $key = $cryptastic->pbkdf2($pass, $salt, 1000, 32) or die("Failed to generate secret key.");

        if ($handle = opendir(PATH.'/ftpd')) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != "..") {
                    $newfile = PATH.'/encrypted/'.$file.'.txt';
                    $msg = file_get_contents(PATH.'/ftpd/'.$file);
                    $encrypted = $cryptastic->encrypt($msg, $key) or die("Failed to complete encryption.");
                    $nfile = fopen($newfile, 'w');
                    fwrite($nfile, $encrypted);
                    fclose($nfile);
                    unlink(PATH.'/ftpd/'.$file);

                }
            }
            closedir($handle);
        }       


//DECRYPT FILE
    function inFTP() {
        global $cryptastic;
        $pass = PGPPASS;
        $salt = PGPSALT;
        $key = $cryptastic->pbkdf2($pass, $salt, 1000, 32) or die("Failed to generate secret key.");

        if ($handle = opendir(PATH.'/encrypted')) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != "..") {
                    $newfile = PATH.'/decrypted/'.$file;
                    $msg = PATH.'/encrypted/'.$file;
                    $decrypted = $cryptastic->decrypt($msg, $key) or die("Failed to complete decryption.");
                    $nfile = fopen($newfile, 'w');
                    fwrite($nfile, $decrypted);
                    fclose($nfile);
                    //unlink(PATH.'/encrypted/'.$file);

                }
            }
            closedir($handle);
        }       
        //$crypt->decrypt($file);
    }
도움이 되었습니까?

해결책

McRypt를 사용한 암호화에 대한이 PHP5 클래스를 사용해보십시오. 이 경우 AES 암호화를 사용하고 있습니다. 사용하는 각 사이트의 키를 변경하고 싶을 것입니다. 적어도 사용하지 않으면 자신의 버전을 작성하는 데 안내 할 수 있습니다.

<?php

class Encryption
{
    const CIPHER = MCRYPT_RIJNDAEL_128; // Rijndael-128 is AES
    const MODE   = MCRYPT_MODE_CBC;

    /* Cryptographic key of length 16, 24 or 32. NOT a password! */
    private $key;
    public function __construct($key) {
        $this->key = $key;
    }

    public function encrypt($plaintext) {
        $ivSize = mcrypt_get_iv_size(self::CIPHER, self::MODE);
        $iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
        $ciphertext = mcrypt_encrypt(self::CIPHER, $this->key, $plaintext, self::MODE, $iv);
        return base64_encode($iv.$ciphertext);
    }

    public function decrypt($ciphertext) {
        $ciphertext = base64_decode($ciphertext);
        $ivSize = mcrypt_get_iv_size(self::CIPHER, self::MODE);
        if (strlen($ciphertext) < $ivSize) {
            throw new Exception('Missing initialization vector');
        }

        $iv = substr($ciphertext, 0, $ivSize);
        $ciphertext = substr($ciphertext, $ivSize);
        $plaintext = mcrypt_decrypt(self::CIPHER, $this->key, $ciphertext, self::MODE, $iv);
        return rtrim($plaintext, "\0");
    }
}

용법:

$key = /* CRYPTOGRAPHIC!!! key */;
$crypt = new Encryption($key);
$encrypted_string = $crypt->encrypt('this is a test');
$decrypted_string = $crypt->decrypt($encrypted_string); // this is a test

메모:

  • 이 클래스는 이진 데이터와 함께 사용하기에 안전하지 않습니다 (NUL 바이트로 끝날 수 있음)
  • 이 클래스는 인증 된 암호화를 제공하지 않습니다.

다른 팁

면서 존 응답이 좋은,사용 base64 인코딩을 해결 하기 위해 그냥 바이너리 안전 문제와 함께 만들 것입니다 암호화된 파일이 33%더 커진 것입니다.여기에 내 PHP 의 구현 AES 립트 파일 형식으로 해결하는 모든 위의 문제됩니다.

https://github.com/philios33/PHP-AES-File-Encryption

그것은 바이너리는 안전하고 포함한 인증 암호화 합니다.사용하기 때문에 오픈 소스 aes 립트 파일 형식(.aes)그것은 완전히 호환되는 무료로 다운로드하여 설치합니다.aes 소프트웨어입니다.

https://www.aescrypt.com/

인터페이스는 매우 간단하는 여부를 암호화 또는 암호 해독하고.당신은 단지 그것에 소스 파일과 암호입니다.

McRypt를 사용하여 데이터를 암호화/암호화해서는 안됩니다. 귀하의 질문과 허용 된 답변에서 볼 수 있듯이 데이터는 인증되지 않으므로 선택한 암호 텍스트 공격이 희생됩니다.

또한 개발자들이 암호화 프리미티브를 올바르게 정리할 수 있도록 많은 노력이 이루어졌습니다. 따라서 McRypt 대신 PHP 프로젝트에 Libsodium을 사용해야합니다. Libsodium은 NaCl의 포크입니다. NaCl/Libsodium은 Mac 태그 검증을 통한 타이밍 공격과 같이 개발자가 찾은 많은 암호화 함정을 제거하기 위해 작성되었습니다.

McRypt는 PHP 7.1에서 더 이상 사용되지 않으며 Libsodim은 PHP에서 암호화를 처리하는 선호하는 방법입니다.

PHP 프로젝트에서 Libsodium을 사용하는 것은 쉽고 안전합니다. Scott Arciszewski https://paragonie.com/book/pecl-libsodium. PHP 암호화를하는 사람에게는 읽을 가치가 있습니다.

케이크 꽤 좋습니다 구현 Rijndael의. 법적 파급 효과가 확실하지 않기 때문에 여기에 직접 코드를 게시하지 않습니다.

API 문서는 다음과 같습니다Security::rijndael() 방법.

파일을 인코딩하는 경우 원할 것입니다 base64_encode() 이 방법을 '로 호출하기 전에'encrypt', 그리고 base64_decode() 이 방법을 '로 호출 한 후decrypt'

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top