찾다
백엔드 개발PHP 튜토리얼PHP 대칭 암호화 알고리즘(DES/AES) 코드

  1. /**
  2. * 일반적으로 사용되는 대칭 암호화 알고리즘 클래스
  3. * 지원되는 키: 64/128/256비트(바이트 길이 8/16/32)
  4. * 지원되는 알고리즘: DES/AES(키 길이에 따른 자동 일치) 사용: DES: 64bit AES: 128/256bit)
  5. * 지원 모드: CBC/ECB/OFB/CFB
  6. * 암호문 인코딩: base64 문자열/16진수 문자열/2진 문자열 스트림
  7. * 패딩 방법: PKCS5Padding ( DES)
  8. *
  9. * @author: linvo
  10. * @version: 1.0.0
  11. * @date: 2013/1/10
  12. */
  13. class Xcrypt{
  14. private $mcrypt;
  15. 개인 $key;
  16. 비공개 $모드;
  17. 비공개 $iv;
  18. 비공개 $blocksize;
  19. /**
  20. * 생성자
  21. *
  22. * @param 문자열 키
  23. * @param 문자열 모드
  24. * @param 문자열 벡터("off": 사용되지 않음 / "auto": 자동 / 기타: 지정 값, 길이는 키와 동일합니다)
  25. */
  26. 공개 함수 __construct($key, $mode = 'cbc', $iv = "off"){
  27. 스위치(strlen($key)) {
  28. 사례 8:
  29. $this->mcrypt = MCRYPT_DES;
  30. 휴식;
  31. 사례 16:
  32. $this->mcrypt = MCRYPT_RIJNDAEL_128;
  33. 휴식;
  34. 사례 32:
  35. $this->mcrypt = MCRYPT_RIJNDAEL_256;
  36. 휴식;
  37. 기본값:
  38. die("키 크기는 8/16/32여야 합니다.");
  39. }
  40. $this->key = $key;
  41. 스위치(strtolower($mode)){
  42. 케이스 'ofb':
  43. $this->mode = MCRYPT_MODE_OFB;
  44. if ($iv == 'off') die('OFB는 IV를 제공해야 합니다'); //OFB必须有向weight
  45. break;
  46. 케이스 'cfb':
  47. $this->mode = MCRYPT_MODE_CFB;
  48. if ($iv == 'off') die('CFB는 IV를 제공해야 합니다'); //CFB必须有向weight
  49. break;
  50. 케이스 'ecb':
  51. $this->mode = MCRYPT_MODE_ECB;
  52. $iv = '해제'; //ECB不需要向weight
  53. break;
  54. 케이스 'cbc':
  55. 기본값:
  56. $this->mode = MCRYPT_MODE_CBC;
  57. }
  58. 스위치 (strtolower($iv)){
  59. 케이스 "off":
  60. $this->iv = null;
  61. 휴식;
  62. 케이스 "자동":
  63. $source = PHP_OS=='WINNT' ? MCRYPT_RAND : MCRYPT_DEV_RANDOM;
  64. $this->iv = mcrypt_create_iv(mcrypt_get_block_size($this->mcrypt, $this->mode), $source);
  65. 휴식;
  66. 기본값:
  67. $this->iv = $iv;
  68. }
  69. }
  70. /**
  71. * 벡터 값 가져오기
  72. * @param 문자열 벡터 값 인코딩(base64/hex/bin)
  73. * @return 문자열 벡터 값
  74. */
  75. 공용 함수 getIV($code = 'base64'){
  76. 스위치 ($code){
  77. 케이스 'base64':
  78. $ret = base64_encode($this->iv);
  79. 휴식;
  80. 케이스 'hex':
  81. $ret = bin2hex($this->iv);
  82. 휴식;
  83. 케이스 'bin':
  84. 기본값:
  85. $ret = $this->iv;
  86. }
  87. $ret 반환;
  88. }
  89. /**
  90. * 암호화
  91. * @param 문자열 일반 텍스트
  92. * @param 문자열 암호 텍스트 인코딩(base64/hex/bin)
  93. * @return 문자열 암호 텍스트
  94. */
  95. 공개 함수 암호화($str, $code = 'base64'){
  96. if ($this->mcrypt == MCRYPT_DES) $str = $this->_pkcs5Pad($str);
  97. if (isset($this->iv)) {
  98. $result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode , $this->iv);
  99. } else {
  100. @$result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode);
  101. }
  102. 스위치($code){
  103. 케이스 'base64':
  104. $ret = base64_encode($result);
  105. 휴식;
  106. 사례 '16진수':
  107. $ret = bin2hex($result);
  108. 휴식;
  109. 케이스 'bin':
  110. 기본값:
  111. $ret = $result;
  112. }
  113. return $ret;
  114. }
  115. /**
  116. * 복호화
  117. * @param 문자열 암호문
  118. * @param 문자열 암호문 인코딩(base64/hex/bin)
  119. * @return 문자열 일반 텍스트
  120. */
  121. 공개 함수 decrypt($str, $code = "base64"){
  122. $ret = false;
  123. 스위치($code){
  124. 케이스 'base64':
  125. $str = base64_decode($str);
  126. 휴식;
  127. 케이스 '16진수':
  128. $str = $this->_hex2bin($str);
  129. 휴식;
  130. 케이스 'bin':
  131. 기본값:
  132. }
  133. if ($str !== false){
  134. if (isset($this->iv)) {
  135. $ret = mcrypt_decrypt($this->mcrypt, $this- >key, $str, $this->mode, $this->iv);
  136. } else {
  137. @$ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode);
  138. }
  139. if ($this->mcrypt == MCRYPT_DES) $ret = $this->_pkcs5Unpad($ret);
  140. }
  141. return $ret;
  142. }
  143. 비공개 함수 _pkcs5Pad($text){
  144. $this->blocksize = mcrypt_get_block_size($this->mcrypt, $this->mode) ;
  145. $pad = $this->blocksize - (strlen($text) % $this->blocksize);
  146. $text를 반환합니다. str_repeat(chr($pad), $pad);
  147. }
  148. 비공개 함수 _pkcs5Unpad($text){
  149. $pad = ord($text{strlen($text) - 1});
  150. if ($pad > strlen($text)) return false;
  151. if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
  152. $ret = substr($text, 0, -1 * $pad);
  153. $ret 반환;
  154. }
  155. 비공개 함수 _hex2bin($hex = false){
  156. $ret = $hex !== false && preg_match('/^[0-9a-fA-F] $/i ', $hex) ? pack("H*", $hex) : 거짓;
  157. $ret 반환;
  158. }
  159. }
复代码
使用示例:
  1. header('Content-Type:text/html;Charset=utf-8;');
  2. include "xcrypt.php";
  3. echo '
    '; 
  4. ////////////////////////////////////
  5. $a = isset($ _GET['a']) ? $_GET['a'] : '测试123';
  6. //密钥
  7. $key = '12345678123456781234567812345678'; //256비트
  8. $key = '1234567812345678'; //128비트
  9. $key = '12345678'; //64비트
  10. //设置模式和IV
  11. $m = new Xcrypt($key, 'cbc', 'auto');
  12. //获取向weight值
  13. echo '向weight:';
  14. var_dump($m->getIV());
  15. //加密
  16. $b = $m->encrypt($a, 'base64');
  17. //解密
  18. $c = $m->decrypt($b, 'base64');
  19. echo '加密后:';
  20. var_dump($b);
  21. echo '解密后:';
  22. var_dump($c);
  23. ///////////////////////////////////////
  24. echo '';
제제대码


PHP, DES, AES


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
과대 광고 : 오늘 PHP의 역할을 평가합니다과대 광고 : 오늘 PHP의 역할을 평가합니다Apr 12, 2025 am 12:17 AM

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?Apr 12, 2025 am 12:13 AM

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

PHP의 __invoke 마법 방법을 설명하십시오.PHP의 __invoke 마법 방법을 설명하십시오.Apr 12, 2025 am 12:07 AM

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

동시성에 대해 PHP 8.1의 섬유를 설명하십시오.동시성에 대해 PHP 8.1의 섬유를 설명하십시오.Apr 12, 2025 am 12:05 AM

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티 : 자원, 지원 및 개발PHP 커뮤니티 : 자원, 지원 및 개발Apr 12, 2025 am 12:04 AM

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP vs. Python : 차이점 이해PHP vs. Python : 차이점 이해Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP : 죽어 가거나 단순히 적응하고 있습니까?PHP : 죽어 가거나 단순히 적응하고 있습니까?Apr 11, 2025 am 12:13 AM

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래 : 적응 및 혁신PHP의 미래 : 적응 및 혁신Apr 11, 2025 am 12:01 AM

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경