Objective-C에서 PHP AES256 암호화 호환성

교활한

프로토콜을 통해 전송 된 암호를 해독하기 위해 PHP (서비스)로 코드를 작성했습니다. 프로토콜은 AES256을 사용하여 "Mac then Encrypt"(MtE) 한 다음 base-64를 사용하여 인코딩 할 암호를 요구합니다.

메시지 구조는 php.net의이 주석에 설명되어 있습니다.

base46encoded (iv + ecrypted(mac + password))

프로세스는 PHP를 사용하여 쉬웠습니다.

public static function getPassword($password, $key, $mac_algorithm = 'sha1',
                                       $enc_algorithm = MCRYPT_RIJNDAEL_256, $enc_mode = MCRYPT_MODE_CBC)
    {
        // truncating pre-shared key to 32 bytes.
        $key = substr($key, 0, 32);

        // decoding the message (being a password) from base64
        $password = base64_decode($password);

        // getting the iv size based on algorithm and encryption mode
        $iv_size = mcrypt_get_iv_size($enc_algorithm, $enc_mode);

        // extracting iv from message header (normally the first 32 byte) for decryption
        $iv_dec = substr($password, 0, $iv_size);

        // getting the encrypted message after the header (after the first 32 byte)
        $password = substr($password, $iv_size);

        // decrypting message using the pre-shared key and extracted iv
        $password = mcrypt_decrypt($enc_algorithm, $key, $password, $enc_mode, $iv_dec);

        // getting block size for hash algorithm in bytes (sha1 block size is 160 bit)
        $mac_block_size = ceil(static::getMacAlgoBlockSize($mac_algorithm)/8);

        // extracting the mac from the header of decrypted message
        $mac_dec = substr($password, 0, $mac_block_size);

        // extracting the valuable message
        $password = substr($password, $mac_block_size);

        // eliminate extra null terminators padded as the result of enc/decryption the following if and the next statement are check clauses for unpack function
        $password = unpack('Z*', $password);
        if (!isset($password[1]))
        {
            return false;
        }

        // obtaining the pure intended message (being the password) from the unpack result
        $password = $password[1];

        // regenerating the mac to control the authenticity and correctness of transmission
        $mac = hash_hmac($mac_algorithm, $password, $key, true);

        // see if transmitted mac (mac_dec) and the generated mac are the same and the data is valid
        if($mac_dec == $mac)
        {
            return $password;
        }
        else
        {
            return false;
        }
    }

이제 문제는 응용 프로그램이 iOS에서이 프로토콜을 중심으로 개발되고 AESCrypt 및 CCCrypt를 시도했지만 암호 해독 결과가 다르다는 것입니다 (무의미한 말).

표준 CCHmac, Base64EncodedStringWithOptions : NSDataBase64EncodingEndLineWithCarriageReturn 및 This SO answer for CCCrypt를 사용했습니다.

zaph

mcrypt_generic_init 함수는 키와 IV를 모두 지정하여 암호를 초기화합니다. 키의 길이는 128 비트, 192 비트 또는 256 비트 암호화를 수행하는지 여부를 결정합니다.

따라서 AES256과 호환되도록 256 비트 (32 바이트) 키와 함께 MCRYPT_RIJNDAEL_128을 사용하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C # AES256 암호화 파일 해독

분류에서Dev

Matlab에서 AES256으로 이미지 암호화 / 복호화

분류에서Dev

Objective C에서 md5를 키로 두 배로 사용하여 AES256 암호화를 수행하는 방법은 무엇입니까?

분류에서Dev

AES256 JAVA 암호화가 C # 암호화와 일치하지 않습니다.

분류에서Dev

PHP에서 암호화에서 Flutter / Dart AES-256-CBC 복호화

분류에서Dev

AES256 암호화 / 복호화 오류 + IOS SDK 7

분류에서Dev

Objective-C로 암호화하고 MCRYPT_RIJNDAEL_256 MCRYPT_MODE_ECB를 사용하여 PHP에서 해독

분류에서Dev

자바에서 AES256의 C #에서 암호화 및 암호 해독 중에 않고 BadPaddingException를 처리하는 방법

분류에서Dev

AES 256 암호화 mysql 대 PHP 방법

분류에서Dev

Logstash 용 S3 출력 플러그인 : AES256을 사용한 서버 측 암호화

분류에서Dev

AES256 암호화 바이트 해독

분류에서Dev

C ++ 및 Qt 5의 AES 256 암호화

분류에서Dev

.Net에서 Rijndael AES 암호화 / 복호화와 동등한 PHP?

분류에서Dev

Node.js Crypto aes256 Cipher를 암호화-복호화하는 방법

분류에서Dev

AES 256 비트 CBC PKCS # 5 Python에서 암호화 / 복호화

분류에서Dev

AES256 암호화 텍스트를 해독 할 수 없습니다.

분류에서Dev

iOS에서 256 블록 크기의 AES 256 비트 암호화

분류에서Dev

AES-256-CTR 노드 JS에서 암호화 및 자바 암호 해독

분류에서Dev

PHP에서 C # TripleDES ECB 암호화

분류에서Dev

PBKDF2WithHmacSHA512 AES 암호화 용 PHP에서 Java 동등

분류에서Dev

C # 암호화 Rijndael 256

분류에서Dev

Byte [] 키 암호화 C # Aes

분류에서Dev

AES-256-CBC Mcrypt-PHP 복호화 및 Crypto-JS 암호화

분류에서Dev

Delphi에서 AES-256 GCM으로 암호화하는 방법

분류에서Dev

암호화 / 복호화 기능을 Python에서 PHP로 변환

분류에서Dev

AES 암호 해독을 PHP에서 C #으로 변환

분류에서Dev

키 체인에서 AES 256 암호화를위한 비밀 키 생성

분류에서Dev

AES-256 CBC 암호화는 Ruby / PHP에서 성공하지만 CryptoJS에서는 해독이 실패합니다.

분류에서Dev

Objective-c에서 OpenSSL 암호화 문자열 해독

Related 관련 기사

  1. 1

    C # AES256 암호화 파일 해독

  2. 2

    Matlab에서 AES256으로 이미지 암호화 / 복호화

  3. 3

    Objective C에서 md5를 키로 두 배로 사용하여 AES256 암호화를 수행하는 방법은 무엇입니까?

  4. 4

    AES256 JAVA 암호화가 C # 암호화와 일치하지 않습니다.

  5. 5

    PHP에서 암호화에서 Flutter / Dart AES-256-CBC 복호화

  6. 6

    AES256 암호화 / 복호화 오류 + IOS SDK 7

  7. 7

    Objective-C로 암호화하고 MCRYPT_RIJNDAEL_256 MCRYPT_MODE_ECB를 사용하여 PHP에서 해독

  8. 8

    자바에서 AES256의 C #에서 암호화 및 암호 해독 중에 않고 BadPaddingException를 처리하는 방법

  9. 9

    AES 256 암호화 mysql 대 PHP 방법

  10. 10

    Logstash 용 S3 출력 플러그인 : AES256을 사용한 서버 측 암호화

  11. 11

    AES256 암호화 바이트 해독

  12. 12

    C ++ 및 Qt 5의 AES 256 암호화

  13. 13

    .Net에서 Rijndael AES 암호화 / 복호화와 동등한 PHP?

  14. 14

    Node.js Crypto aes256 Cipher를 암호화-복호화하는 방법

  15. 15

    AES 256 비트 CBC PKCS # 5 Python에서 암호화 / 복호화

  16. 16

    AES256 암호화 텍스트를 해독 할 수 없습니다.

  17. 17

    iOS에서 256 블록 크기의 AES 256 비트 암호화

  18. 18

    AES-256-CTR 노드 JS에서 암호화 및 자바 암호 해독

  19. 19

    PHP에서 C # TripleDES ECB 암호화

  20. 20

    PBKDF2WithHmacSHA512 AES 암호화 용 PHP에서 Java 동등

  21. 21

    C # 암호화 Rijndael 256

  22. 22

    Byte [] 키 암호화 C # Aes

  23. 23

    AES-256-CBC Mcrypt-PHP 복호화 및 Crypto-JS 암호화

  24. 24

    Delphi에서 AES-256 GCM으로 암호화하는 방법

  25. 25

    암호화 / 복호화 기능을 Python에서 PHP로 변환

  26. 26

    AES 암호 해독을 PHP에서 C #으로 변환

  27. 27

    키 체인에서 AES 256 암호화를위한 비밀 키 생성

  28. 28

    AES-256 CBC 암호화는 Ruby / PHP에서 성공하지만 CryptoJS에서는 해독이 실패합니다.

  29. 29

    Objective-c에서 OpenSSL 암호화 문자열 해독

뜨겁다태그

보관