비대칭 암호화 오픈스sl 프로토콜 php7 실천
업무 중에 민감한 데이터에 대한 복호화 수요가 자주 나타난다. 예를 들어 자신의 현재 금융회사가 관련된 사용자 거래 데이터, 사용자 신분 식별 검증 등이다.RSA 암호화 알고리즘이 사용된 사용자 IDphp에서 Openss 프로토콜을 사용했습니다.
비대칭 암호화는 개인 키 암호화로 공공 키로 복호화해야 한다.공개 키 암호화는 개인 키로 복호화해야 한다.공개 키와 개인 키는 쌍으로 나타나며, 공개 키는 사용하는 사람에게 보낼 수 있고, 개인 키는 서비스 측에서만 보존할 수 있다.
다음은 php에서 구현한 openssl 복호화 부분의 예시 코드입니다.
## centos7
## openssl ( yum install -y openssl-devel):
[root@iz2vcf47jzvf8dxrapolf7z test]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@iz2vcf47jzvf8dxrapolf7z test]#
# rsa_private_key.pem
[root@iz2vcf47jzvf8dxrapolf7z test]# openssl genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
..................................................++++++
........................................................................++++++
e is 65537 (0x10001)
## pkcs8 ( )
[root@iz2vcf47jzvf8dxrapolf7z test]# openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
##
[root@iz2vcf47jzvf8dxrapolf7z test]# cat rsa_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCh13gUKZWQlx7cuYQvY1A6JuJjArMax8yHcTrtcL+kpa5Cg6mD
609QNiTacuJxmh7Q/w+1Lw/cuWN0Q7s3s4WzJET6YCi3fH4zqVmpqWIcKWC/hE3p
VV3lJsBvMpoz2bFn1eRwVtmSp4dVAqe542YvbZ13VGheEvkKi5uqWyhY1wIDAQAB
AoGAIYSjjOFz5Wc28BXH55yU8AY/mqvjdidtF5v+zVAtkKbzqTjlcbnZSk58YXWr
qkV2HmjE0wx1J4yJqXmhm46loLkIpWdQfzRyFFnK3xmo9Lc6jXbIrKmFYyN7FTqT
5cADvrTJ2jO9BlDG0ddTp7pl6dRi00jkrTRU3mgxZZ1kOWkCQQDRZZl9LKs+lz0v
kOEKGuhjfHpFYpjce/mg0XfOZuFIqYXdm/nO1nx/KAr+xtUhiqkRzdxADOA0Nrxg
alCtT1NbAkEAxdxotvcFYKOFES1aOAg35mv7Inlnjelbj1Jx0wtGRVUV/0nvMVKf
TLInECD2mUaE00OWjuXanAI2FQQWbML1NQJBAL/AGDRGaXJhsIgUVd+ZEGG6JYXQ
akbNyKR57Qo3r+mIQ6vSH4pHY65VjuwMTDPw9C33o8+LeuyVix+He+WZFK0CQQDA
Gb+9LFYXPou6Yqr+TdRgLiSUkwScfp27qBMFESQ3umVyB8lovMwXPby5ZxelNxdM
uolZ0gaOg4MYonBXRm2lAkAEOjH32XMSTB+HI+lQrLCFiumyRjHpgbRgTcyUQolY
fjR63M0E/rzVIneKPqLP+ySOYLFcO3bjuMa75CQic8PF
-----END RSA PRIVATE KEY-----
###개인 키에 따라 적절한 공개 키 얻기
[root@iz2vcf47jzvf8dxrapolf7z test]# openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
writing RSA key
[root@iz2vcf47jzvf8dxrapolf7z test]# cat rsa_public_key.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCh13gUKZWQlx7cuYQvY1A6JuJj
ArMax8yHcTrtcL+kpa5Cg6mD609QNiTacuJxmh7Q/w+1Lw/cuWN0Q7s3s4WzJET6
YCi3fH4zqVmpqWIcKWC/hE3pVV3lJsBvMpoz2bFn1eRwVtmSp4dVAqe542YvbZ13
VGheEvkKi5uqWyhY1wIDAQAB
-----END PUBLIC KEY-----
## 새 openssl.php
[root@iz2vcf47jzvf8dxrapolf7z test]# cat openssl.php
/*** 개인 키 암호화/공개 키 복호화 * * @param $string 복호화 문자열 * @param $isEncrypt boolean * return string |null */function openssl Private Encrypt ($str, $isEncrypt =true) {
if($isEncrypt){ $privateKey = file_get_contents('./rsa_private_key.pem'); $privateKey = openssl_pkey_get_private($privateKey);
return openssl_private_encrypt($str, $encryptedStr, $privateKey) ? base64_encode($encryptedStr) : null; }else{ $publicKey = file_get_contents('./rsa_public_key.pem'); $publicKey = openssl_pkey_get_public($publicKey);
return (openssl_public_decrypt(base64_decode($str), $decryptedStr, $publicKey)) ? $decryptedStr : null; }}
/*** 공개 키 암호화/개인 키 복호화 * * @param $string 복호화 문자열 * @param $isEncrypt boolean * return string |null */function openssl Public Encrypt ($str, $isEncrypt =true) {
if($isEncrypt){ $publicKey = file_get_contents('./rsa_public_key.pem'); $publicKey = openssl_pkey_get_public($publicKey);
return openssl_public_encrypt($str, $encryptedStr, $publicKey) ? base64_encode($encryptedStr) : null; }else{ $privateKey = file_get_contents('./rsa_private_key.pem'); $privateKey = openssl_pkey_get_private($privateKey);
return (openssl_private_decrypt(base64_decode($str), $decryptedStr, $privateKey)) ? $decryptedStr : null; }}
$config = array();$config['title'] = 'PHP is the best program language.';$config['comment'] = 'PHPERS are great people.';
$privateEncrypt = opensslPrivateEncrypt(json_encode($config));echo("##privateEncrypt is:". PHP_EOL);echo($privateEncrypt . PHP_EOL);$privateDecrypt = opensslPrivateEncrypt($privateEncrypt, false);echo("##privateDecrypt is:". PHP_EOL);echo($privateDecrypt . PHP_EOL);
$publicEncrypt = opensslPublicEncrypt(json_encode($config));echo("##publicEncrypt is:". PHP_EOL);echo($publicEncrypt . PHP_EOL);$publicDecrypt = opensslPublicEncrypt($publicEncrypt, false);echo("##publicDecrypt is:". PHP_EOL);echo($publicDecrypt . PHP_EOL);
## 스크립트 실행[root@iz2vcf47jzvf8dxrapolf7z test]# php openssl.php##privateEncrypt is:mLrLIAwbwlE69Yj5/lnNw1t8qSjhnFa+96s/kSMYweAn/HEsV7jfVAJ6mn/FY2DRRWkKeOnguUYsRcFTBcS1ieG7UtqbUAASXA5dwVgtTrFoDcDhHMl7p90+dIO8n+vMoBx1kkUegpvtH03y3MgUVSj/BLkLE8jrFXyjGufIcv0=##privateDecrypt is:{"title":"PHP is the best program language.","comment":"PHPERS are great people."}##publicEncrypt is:NW2k5m2pKrZmEMSHXiK7mfyC+yDjH1+b6TrEMPv+ywBfsUlo2P8eWwcXOQxvsV4UG87a1S4Xa2QySntdEwhpYoim97457ODVVCb6jx+cqqdWJ1wlLS+gx7FJxw7Z0kMPmCm5iMcQwWPK+UzF+dpc/gJFa9uGAAmYczUumOauAx0=##publicDecrypt is:{"title":"PHP is the best program language.","comment":"PHPERS are great people."}
Pkcs 표준:
PKCS 표준 요약
릴리즈
이름:
간단한 소개
PKCS #1
2.1
RSA 암호 컴파일 표준(RSA Cryptography Standard)
RSA 의 수리적 기반, 공공/개인 키 형식, 암호화, 서명/검사 절차를 정의했습니다.1.5 버전은 공격을 받은 적이 있다.
PKCS #2
-
취소
RSA 암호화 요약 정보를 정교하게 변환하는 방식으로 PKCS#1에 포함되었습니다.
PKCS #3
1.4
DH 키 프로토콜 표준(Diffie-Hellman key agreement Standard)
DH 키 프로토콜을 기반으로 하는 키 프로토콜 표준을 규범화합니다.그 기능은 양측이 금의 협의를 통해 회의 키(Session 키)를 작성할 수 있게 한다.
PKCS #4
-
취소
RSA 키 변환을 위한 프로세스를 규범화하는 데 사용되었습니다.PKCS#1에 포함되어 있습니다.
PKCS #5
2.0
암호 기본 암호화 표준(Password-based Encryption Standard)
RFC 2898 및 PBKDF2 참조
PKCS #6
1.5
인증서 확장 구문 표준(Extended-Certificate Syntax Standard)
원래 X.509의 인증서 형식 표준을 확장합니다.
PKCS #7
1.5
암호 메시지 구문 표준(Cryptographic Message Syntax Standard)
RFC 2315 참조공개 키 인프라 (PKI) 로 생성된 서명/밀문의 형식을 규범화했습니다.디지털 인증서의 응용을 넓히기 위한 목적도 마찬가지다.여기에는 S/MIME 및 CMS가 포함됩니다.
PKCS #8
1.2
개인 키 메시지 표시 표준(Private-Key Information Syntax Standard).
Apache가 인증서 개인 키를 읽는 표준입니다.
PKCS #9
2.0
속성 형식 선택(Selected Attribute Types)
PKCS#6, 7, 8, 10에 대한 선택 속성 형식을 정의합니다.
PKCS #10
1.7
인증서 요청 기준(Certification Request Standard)
RFC 2986 참조인증서 센터에 인증서를 요청하는 CSR (certificate signing request) 의 형식을 규범화했습니다.
PKCS #11
2.20
암호 장치 표준 인터페이스(Cryptographic Token Interface)
암호 장치의 API(Application Interface) 사양을 정의합니다.
PKCS #12
1.0
개인 메시지 교환 표준(Personal Information Exchange Syntax Standard)
개인 키와 공개 키 인증서 (public key certificate) 를 포함하는 파일 형식을 정의했습니다.개인 키 채취 비밀번호 (password) 보호.일반적인 PFX는 PKCS#12를 수행합니다.
PKCS #13
–
타원 곡선 암호학 표준 (Elliptic curve cryptography Standard)
작성 중입니다.타원 곡선 암호학을 바탕으로 발전된 암호 기술의 응용을 규범화하다.타원 곡선 암호학은 새로운 암호학 기술로 그 강도와 효율은 현행 지수 연산을 바탕으로 하는 암호학 알고리즘보다 우수하다.그러나 이 알고리즘의 응용은 아직 보급되지 않았다.
PKCS #14
–
무작위 생성기 표준(Pseudo-random Number Generation)
작성 중입니다.랜덤 생성기의 사용과 설계를 규범화하다.
PKCS #15
1.1
암호 장치 메시지 형식 표준(Cryptographic Token Information Format Standard)
암호 장치 내부 데이터의 조직 구조를 정의했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.