찾다

 >  Q&A  >  본문

mcrypt_crypt를 openssl_crypt로 변환하는 방법은 무엇입니까?

현재는 사용되지 않는 "mcrypt"를 사용하는 특정 WordPress 플러그인을 개선하고 싶습니다. 대신 OpenSSL 라이브러리를 사용하여 제출된 데이터를 암호화하고 싶지만 암호화 프로세스 중에 문제가 발생합니다. 즉, openssl_encrypt 함수가 mcrypt_encrypt와 다른 값을 반환하고 연결된 시스템이 반환하지 않습니다. 내 데이터의 값이 정확하고 소유자는 내가 업로드한 콘텐츠의 로그를 나에게 보낼 수 없습니다. :(

인터넷 전체를 검색했지만 아직 해결책을 찾지 못했습니다. 패딩에 문제가 있는 것 같은데 해결책을 찾을 수 없습니다. 도울 수 있니?

내 PHP 개체 $password, $salt 및 $iv

내에서 눈에 띄는 변경 사항은 다음과 같습니다. 으아아아

잊어버린 언급: OPENSSL_ZERO_PADDING이 오류를 반환합니다. OPENSSL_RAW_DATA를 사용하면 mcrypt_encrypt와 비슷한 결과를 얻을 수 있지만 결말은 다릅니다. 예를 들면 다음과 같습니다.

OpenSSL: rPzVvF7gaPMA4ADAjHUW8Wy1ThTJG%2BVPdcz5iKAkAwrDTTFTcOpWgWOCh9l9JFZ8WcNzMJ868026TkUxcYJMrQ==

MCRYPT: rPzVvF7gaPMA4ADAjHUW8Wy1ThTJG%2BVPdcz5iKAkAwrDTTFTcOpWgWOCh9l9JFZ8UGVfF091Q9bY61mTRg%2BBSg==

P粉287345251P粉287345251448일 전611

모든 응답(1)나는 대답할 것이다

  • P粉021854777

    P粉0218547772023-09-10 15:21:03

    encryptSSL() 中,当前使用 Base64 编码两次,默认情况下一次是显式编码,一次是隐式编码。因此,必须删除其中一种 Base64 编码,无论是显式编码还是隐式编码。前者是通过删除 base64_encode() 调用来实现的,后者是通过设置 OPENSSL_RAW_DATA 깃발을 사용하여 달성했습니다.

    또한 mcrypt는 제로 패딩을 사용하고 PHP/OpenSSL은 PKCS#7 패딩을 사용합니다. 따라서 encryptSSL() 给出与 encryptMCRYPT() 과 동일한 결과를 얻으려면 제로 패딩을 사용해야 합니다. PHP/OpenSSL은 제로 패딩을 지원하지 않으므로 PKCS#7 패딩을 비활성화해야 하며(OPENSSL_ZERO_PADDING 플래그 사용) 제로 패딩을 명시적으로 구현해야 합니다. >.

    전체:

    으아악

    포함:

    으아악

    이러한 변경으로 두 기능 모두 동일한 결과를 제공합니다.

    제로 패딩은 PKCS#7 패딩보다 안정성이 떨어집니다.


    보안:

    정적 IV와 정적 솔트는 버그라는 점에 유의하세요. 대신, 둘 다 무작위로 생성되어 암호문과 함께 일반적으로 연결되어(비밀도 아님) 암호 해독 당사자에게 전달됩니다.

    또한 PBKDF2의 반복 횟수 100은 일반적으로 너무 작습니다.

    회신하다
    0
  • 취소회신하다