>백엔드 개발 >PHP 튜토리얼 >PHP에서 AES-128-CBC-PKCS5Padding 암호화를 구현하는 방법을 자세히 설명하는 기사

PHP에서 AES-128-CBC-PKCS5Padding 암호화를 구현하는 방법을 자세히 설명하는 기사

藏色散人
藏色散人앞으로
2021-09-01 15:49:065474검색

상대방의 요청은 인터페이스의 비즈니스 데이터를

인코딩하여 결과 문자열을 제출하고, 암호화 방법에 해당하는 키(key)와 초기화 벡터(오프셋)도 제공하는 것입니다.

AES-128-CBC-PKCS5Padding 加密,然后再做 Base64처음에 이 암호화 방식을 보고 해당하는 암호화 함수가 있는지 알아보기 위해 PHP 함수 라이브러리를 검색해 보았는데, 검색해 보니 그런 함수가 없어서 직접 구현해야 한다는 걸 알게 되었습니다. 확장 구현을 사용할 수 있지만 PHP 7.1.0부터 mcrypt 기능이 중단되었습니다. 이 기능을 사용하지 않는 것이 좋습니다. OpenSSL 기능을 참조하세요. 매뉴얼 하단에서 openssl_encrypt(암호화된 데이터) 기능을 이해하면 가능하다는 것을 알았습니다. 구현 기능은 다음과 같습니다.

  function encrypt($input, $key, $iv){
      return base64_encode(openssl_encrypt($input, 'AES-128-CBC', $key, OPENSSL_RAW_DATA,$iv));
  }

  // 解密
  function decrypt($input, $key, $iv){
      return openssl_decrypt(base64_decode($input), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
  }

  // 测试加密 (我这里用的是json字符串)
  $dataJson = '[{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]';
  print_r(encrypt($dataJson, $key, $iv));
  //u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D

  // 测试解密
  $strr = 'u9Bd8oHXDGvjZcTIX9HK1r1q+aSu+/48gsfoGVrxoScZuX8yaj/xco8F2yHt2T987JNHil9LwjAmu9o5NJaicWQDaiKwMD5o70k1A9bGjDd71xb4hXRx3ddZwI85oTQQEUQLadR5C759SdaN8AOxlzH+yGlAWTOaEleulKoRTwaknG1NCM/qIRQ8gI5lzv+D';
  print_r(decrypt($strr, $key, $iv));
  // [{"Code": "123123", "Name": "Bob", "Address": "\u94f6\u5ddd\u5e02"}, {"Code": "464776", "Name": "Hello", "Address": "\u5317\u4eac\u5e02"}]
셀프 테스트를 통과하고, 자랑스러운 표정으로 편안히 앉아 공동 디버깅을 기다렸습니다. 그러다가 다른 사업에 대해 글을 쓰기 시작했는데, 며칠 후 공동 디버깅을 해보니 내가 암호화한 내용을 상대방이 복호화할 수 없었고, 암호화 알고리즘이 일치하지 않는 것도 복호화할 수 없었다. 구글에서 관련 이슈를 검색한 결과, 일반적인 의미는 버려진 mcrypt 암호화 라이브러리에서 128은 실제로 키 크기가 아닌 블록 크기를 의미하는데, openssl의 aes-128-cbc에서는 128이 의미한다는 것입니다. 즉, 유효한 256비트 키를 사용할 경우 모두 aes-256이고, mcrypt를 openssl의 암호화 방법으로 변환하려면 mcrypt의 128을 openssl의 256으로 작성해야 하므로 변경했습니다. aes-128-cbc는 aes-256-cbc로 시도해 보겠다는 자세로 디버깅을 해보니, 최종적으로 공동 디버깅이 통과된 것으로 나타났습니다. 그러나 아직 구체적인 기술적 세부 사항은 다음과 같이 수정해 보겠습니다. 나중에 시간 나면 공부해 보세요

> **解决的方案,是把加密方式 AES-128-CBC 替换成 AES-256-CBC**

                                                 

위 내용은 PHP에서 AES-128-CBC-PKCS5Padding 암호화를 구현하는 방법을 자세히 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제