>백엔드 개발 >PHP 튜토리얼 >openssl을 기반으로 한 PHP 암호화 및 복호화 방법

openssl을 기반으로 한 PHP 암호화 및 복호화 방법

怪我咯
怪我咯원래의
2017-07-12 10:03:124576검색

openssl OpenSSL 소개
SSL은 Secure Socket Layer(Secure Socket Layer Protocol)의 약어로, 인터넷에서 기밀 전송을 제공할 수 있습니다. Netscape는 최초의 웹 브라우저를 출시했을 때 현재 버전 3.0인 SSL 프로토콜 표준도 제안했습니다. SSL은 공개 키 기술을 사용합니다. 그 목표는 두 애플리케이션 간 통신의 기밀성과 신뢰성을 보장하는 것이며 서버 측과 사용자 측 모두에서 지원될 수 있습니다. 현재 공개 키 기술을 사용하는 SSL 프로토콜은 인터넷 보안 통신을 위한 업계 표준이 되었습니다. SSL(Secure Sockets Layer) 프로토콜은 공격자가 사용자/서버 애플리케이션 간의 통신을 도청하는 것을 방지하고 항상 서버를 인증하며 선택적으로 사용자를 인증합니다. SSL 프로토콜에는 안정적인 TCP(Transport Layer Protocol)가 필요합니다. SSL 프로토콜의 장점은 애플리케이션 계층 프로토콜과 독립적이라는 점입니다. HTTP, FTP, TELNET 등과 같은 상위 수준 애플리케이션 계층 프로토콜은 SSL 프로토콜을 기반으로 투명하게 구축될 수 있습니다. SSL 프로토콜은 애플리케이션 계층 프로토콜 통신 전에 암호화 알고리즘, 통신 키 협상 및 서버 인증을 완료했습니다. 그 후 애플리케이션 계층 프로토콜에 의해 전송되는 데이터는 통신의 개인 정보 보호를 보장하기 위해 암호화됩니다. 위의 설명을 통해 SSL 프로토콜이 제공하는 보안 채널은 다음 세 가지 특성을 갖습니다. 1. 데이터 기밀성 정보 암호화는 데이터 기밀성을 달성하기 위해 암호화 알고리즘을 사용하여 일반 입력 파일을 암호화된 파일로 변환하는 것입니다. 암호화 프로세스에서는 데이터를 암호화한 다음 해독하기 위해 키를 사용해야 합니다. 키가 없으면 암호화된 데이터를 해독할 수 없습니다. 데이터가 암호화된 후에는 안전한 방법을 사용하여 키만 전송하면 됩니다. 암호화된 데이터는 공개적으로 전송될 수 있습니다. 2. 데이터 일관성 암호화는 데이터 일관성도 보장할 수 있습니다. 예: 메시지 인증 코드(MAC)는 사용자가 제공한 암호화된 정보를 확인할 수 있습니다. 수신자는 MAC을 사용하여 암호화된 데이터를 확인하여 전송 중에 데이터가 변조되지 않았는지 확인할 수 있습니다. 3. 보안 확인 암호화의 또 다른 용도는 개인 식별이며, 사용자의 키는 보안 확인 식별로 사용될 수 있습니다. SSL은 기밀 정보를 전송할 때 클라이언트와 서버 간의 암호화된 통신 프로토콜로 공개 키 암호화 기술(RSA)을 사용합니다.
OpenSSL이란 무엇입니까?
수많은 암호화 알고리즘, 공개 키 인프라 표준 및 SSL 프로토콜이 있습니다. 아마도 이러한 흥미로운 기능은 이러한 모든 알고리즘과 표준을 구현하는 아이디어를 제공할 것입니다. 그렇다면 저는 당신을 존경하면서도 상기시켜 드리지 않을 수 없습니다. 이것은 힘든 과정입니다. 이 작업은 더 이상 몇 가지 암호화 논문과 프로토콜 문서를 읽는 것처럼 간단하지 않고 이러한 모든 알고리즘, 표준 및 프로토콜 문서의 모든 세부 사항을 이해하고 친숙할 수 있는 C 언어 문자를 하나씩 사용하는 것입니다. 이러한 정의와 프로세스를 구현합니다. 이 재미있고 무서운 일을 하는 데 얼마나 많은 시간이 필요할지는 알 수 없지만, 확실히 1~2년 정도 걸릴 문제는 아닙니다.
먼저 1995년에 큰 영향을 미친 OpenSSL 소프트웨어 패키지를 작성하기 시작한 Eric A. Young과 Tim J. Hudson에게 감사드립니다. 우리를 더욱 행복하게 만드는 것은 이것이 오픈 소스 소프트웨어라는 점입니다. 많은 제한이 있습니다. 패키지를 사용하면 이 패키지로 많은 작업을 수행할 수 있습니다. Eric A. Young과 Tim J. Hudson은 캐나다인입니다. 그들은 나중에 OpenSSL을 작성하여 유명해졌고 이후 큰 회사에 가서 많은 돈을 벌었습니다. 1998년 OpenSSL 프로젝트 팀이 OpenSSL 개발을 인수하고 OpenSSL 버전 0.9.1을 출시했습니다. 지금까지 OpenSSL 알고리즘은 매우 완벽했으며 SSL2.0, SSL3.0 및 TLS1.0을 지원합니다.
OpenSSL은 C 언어를 개발 언어로 사용하므로 OpenSSL은 다양한 플랫폼에서 동일한 친숙한 기능을 사용할 수 있는 대다수의 기술 담당자에게 매우 놀라운 일입니다. OpenSSL은 Linux, Windows, BSD, Mac, VMS 및 기타 플랫폼을 지원하므로 OpenSSL을 널리 적용할 수 있습니다. 그러나 새로 성장한 C++ 프로그래머에게는 C 언어 코드에 그다지 익숙하지 않을 수 있지만 C++를 사용하여 OpenSSL과 동일한 기능으로 소프트웨어 패키지를 다시 작성하는 것보다 C 언어에 익숙해지는 것이 훨씬 쉽습니다.
전체 OpenSSL 소프트웨어 패키지는 대략 암호화 알고리즘 라이브러리, SSL 프로토콜 라이브러리 및 애플리케이션의 세 가지 주요 기능 부분으로 나눌 수 있습니다. OpenSSL의 디렉터리 구조는 자연스럽게 이 세 가지 기능 부분을 중심으로 계획되었습니다.
암호화 기반 보안 개발 패키지인 OpenSSL은 주요 암호화 알고리즘, 일반적으로 사용되는 키 및 인증서 캡슐화 관리 기능, SSL 프로토콜 등 매우 강력하고 포괄적인 기능을 제공하며 테스트 또는 기타 목적으로 사용할 수 있는 풍부한 애플리케이션을 제공합니다.
1.대칭 암호화 알고리즘
OpenSSL은 총 8개의 대칭 암호화 알고리즘을 제공하며 그 중 7개는 블록 암호화 알고리즘이고 유일한 스트림 암호화 알고리즘은 RC4입니다. 이 7가지 블록 암호화 알고리즘은 AES, DES, Blowfish, CAST, IDEA, RC2 및 RC5입니다. 모두 ECB(전자 코드북 모드), CBC(암호화 블록 체인 모드), CFB(암호화 피드백 모드) 및 출력 피드백 모드를 지원합니다. (OFB) 일반적으로 사용되는 4가지 블록 암호 암호화 모드입니다. 이 중 AES에서 사용하는 CFB(암호화 피드백 모드) 및 OFB(출력 피드백 모드) 패킷 길이는 128비트인 반면, 다른 알고리즘은 64비트를 사용합니다. 실제로 DES 알고리즘은 일반적으로 사용되는 DES 알고리즘일 뿐만 아니라 3키 및 2키 3DES 알고리즘도 지원합니다.
2. 비대칭 암호화 알고리즘
OpenSSL은 DH 알고리즘, RSA 알고리즘, DSA 알고리즘, 타원곡선 알고리즘(EC) 등 총 4가지 비대칭 암호화 알고리즘을 구현합니다. DH 알고리즘 일반 사용자 키 교환. RSA 알고리즘은 키 교환과 디지털 서명 모두에 사용할 수 있으며, 물론 느린 속도를 견딜 수 있다면 데이터 암호화에도 사용할 수 있습니다. DSA 알고리즘은 일반적으로 디지털 서명에만 사용됩니다.
3. 정보 다이제스트 알고리즘
OpenSSL은 MD2, MD5, MDC2, SHA(SHA1) 및 RIPEMD의 5가지 정보 다이제스트 알고리즘을 구현합니다. SHA 알고리즘에는 실제로 SHA와 SHA1이라는 두 가지 정보 다이제스트 알고리즘이 포함되어 있습니다. 또한 OpenSSL은 DSS 표준에 지정된 두 가지 정보 다이제스트 알고리즘인 DSS와 DSS1도 구현합니다.
4. 키 및 인증서 관리
키 및 인증서 관리는 PKI의 중요한 부분입니다. OpenSSL은 다양한 기능을 제공하고 다양한 표준을 지원합니다.
우선, OpenSSL은 ASN.1 인증서 및 키 관련 표준을 구현하여 인증서, 공개 키, 개인 키, 인증서 요청, CRL 및 기타 데이터 객체에 대한 DER, PEM 및 BASE64 인코딩 및 디코딩 기능을 제공합니다. OpenSSL은 다양한 공개 키 쌍과 대칭 키를 생성하기 위한 방법, 기능 및 애플리케이션을 제공하며 공개 키와 개인 키에 대한 DER 인코딩 및 디코딩 기능도 제공합니다. 그리고 개인 키의 PKCS#12 및 PKCS#8 인코딩 및 디코딩 기능을 구현합니다. OpenSSL은 표준에 따라 개인 키에 대한 암호화 보호를 제공하므로 키를 안전하게 저장하고 배포할 수 있습니다.
이를 기반으로 OpenSSL은 인증서의 X.509 표준 인코딩 및 디코딩, PKCS#12 형식의 인코딩 및 디코딩, PKCS#7의 인코딩 및 디코딩을 구현합니다. 또한, 인증서 키 생성, 요청 생성, 인증서 발급, 폐지, 검증 등 인증서 관리 기능을 지원하는 텍스트 데이터베이스도 제공합니다.
실제로 OpenSSL에서 제공하는 CA 애플리케이션은 인증서 발급의 전체 프로세스와 대부분의 인증서 관리 메커니즘을 구현하는 소규모 인증서 관리 센터(CA)입니다.
5.SSL 및 TLS 프로토콜
OpenSSL은 SSL 프로토콜의 SSLv2 및 SSLv3을 구현하고 대부분의 알고리즘 프로토콜을 지원합니다. OpenSSL은 TLSv1.0도 구현합니다. TLS는 SSLv3의 표준화된 버전이지만 큰 차이는 없지만 세부적으로는 다릅니다.
OpenSSL의 기능을 구현한 소프트웨어는 많지만 OpenSSL에 구현된 SSL 프로토콜은 SSL 프로토콜에 대한 보다 명확한 이해를 제공할 수 있습니다. 왜냐하면 적어도 두 가지 사항이 있기 때문입니다. 첫째, OpenSSL에 의해 구현된 SSL 프로토콜은 오픈 소스입니다. code 예, 우리는 SSL 프로토콜 구현의 모든 세부 사항을 조사할 수 있습니다. 둘째, OpenSSL에 의해 구현된 SSL 프로토콜은 순수한 SSL 프로토콜이며 다른 프로토콜(예: HTTP)과 결합되지 않습니다. 이는 SSL 프로토콜의 진정한 모습을 명확히 합니다.
6. 애플리케이션
OpenSSL 애플리케이션은 OpenSSL의 중요한 부분이 되었으며, 처음에는 OpenSSL 개발자가 그 중요성을 생각하지 않았을 수도 있습니다. 현재 OpenSSL 애플리케이션 중 다수는 API가 아닌 OpenSSL 애플리케이션을 기반으로 합니다. 예를 들어 OpenCA는 OpenSSL 애플리케이션을 사용하여 완전히 구현됩니다. OpenSSL 애플리케이션은 OpenSSL의 암호화 알고리즘 라이브러리와 SSL 프로토콜 라이브러리를 기반으로 작성되었으므로 매우 유용한 OpenSSL API 사용 예제도 있습니다. 이러한 예제를 모두 읽고 나면 OpenSSL API 사용을 더욱 포괄적으로 이해할 수 있습니다. 또한 의지력을 발휘하는 직업이기도 합니다.
OpenSSL 애플리케이션은 많은 사람들이 보기에 OpenSSL이 모든 것을 자체적으로 수행하므로 더 많은 개발 작업을 수행할 필요가 없습니다. 따라서 이러한 애플리케이션을 OpenSSL 지침이라고 부르기도 합니다. OpenSSL 애플리케이션에는 주로 키 생성, 인증서 관리, 형식 변환, 데이터 암호화 및 서명, SSL 테스트 및 기타 보조 구성 기능이 포함됩니다.
7. 엔진 메커니즘 엔진 메커니즘은 OpenSSL 버전 0.9.6에서 처음 등장했으며, OpenSSL 버전 0.9.7에서는 엔진 메커니즘이 OpenSSL 커널에 통합되었습니다. OpenSSL의 필수적인 부분입니다. 엔진 메커니즘의 목적은 OpenSSL이 암호화를 위해 타사에서 제공하는 소프트웨어 암호화 라이브러리 또는 하드웨어 암호화 장치를 투명하게 사용할 수 있도록 하는 것입니다. OpenSSL의 엔진 메커니즘은 이 목표를 성공적으로 달성하여 OpenSSL을 단순한 암호화 라이브러리가 아니라 대부분의 암호화 라이브러리 또는 암호화 장치와 조정할 수 있는 범용 암호화 인터페이스를 제공합니다. 물론 특정 암호화 라이브러리나 암호화 장치를 OpenSSL과 연동시키려면 소량의 인터페이스 코드를 작성해야 하지만, 여전히 암호화에 대한 약간의 지식이 필요하기는 하지만 작업량은 크지 않습니다. 엔진 메커니즘의 기능은 기본적으로 Windows에서 제공하는 CSP 기능과 동일합니다. 현재 OpenSSL 버전 0.9.7은 CryptoSwift, nCipher, Atalla, Nuron, UBSEC, Aep, SureWare 및 IBM 4758 CCA 하드웨어 암호화 장치를 포함하여 8가지 유형의 내장형 타사 암호화 장치를 지원합니다. 이제 PKCS#11 인터페이스를 지원하는 엔진 인터페이스가 있으며 누군가 Microsoft CryptoAPI를 지원하는 인터페이스도 개발 중입니다. 물론 위의 모든 엔진 인터페이스에 대한 지원이 포괄적이지 않을 수 있습니다. 예를 들어 하나 또는 두 개의 공개 키 알고리즘이 지원될 수 있습니다.
8. 보조 기능
BIO 메커니즘은 OpenSSL에서 제공하는 고급 IO 인터페이스입니다. 이 인터페이스는 메모리 액세스, 파일 액세스, 소켓 등과 같은 거의 모든 유형의 IO 인터페이스를 캡슐화합니다. 이는 코드의 재사용성을 크게 향상시키고 OpenSSL에서 제공하는 API의 복잡성을 줄여줍니다.
OpenSSL은 또한 난수 생성 및 관리를 위한 완벽한 솔루션 세트와 지원 API 기능을 제공합니다. 난수의 품질은 키가 안전한지 여부를 결정하는 중요한 전제 조건입니다.
OpenSSL은 비밀번호에서 키를 생성하는 API, 인증서 발급 및 관리를 위한 구성 파일 메커니즘 등 기타 보조 기능도 제공합니다. 인내심을 충분히 갖고 있다면 OpenSSL을 심층적으로 사용하는 동안 그러한 작은 기능을 천천히 발견하게 될 것이며 끊임없이 새로운 놀라움을 선사할 것입니다.

이 글에서는 주로 PHP에서 openssl을 기반으로 한 암호화 및 복호화 방법 구현을 소개하고, php맞춤 기능openssl을 기반으로 한 암호화 및 복호화 작업 구현의 관련 기술을 예제 형식으로 분석합니다. to it

이 글에서는 PHP가 openssl을 기반으로 암호화 및 복호화 방법을 구현하는 예제를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

1. openssl 암호화 방법:

function encrypt($id){
  $id=serialize($id);
  $key="1112121212121212121212";
  $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16));
  $data['value']=openssl_encrypt($id, 'AES-256-CBC',$key,0,base64_decode($data['iv']));
  $encrypt=base64_encode(json_encode($data));
  return $encrypt;
}

2. 으아악

위 내용은 openssl을 기반으로 한 PHP 암호화 및 복호화 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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