비대칭 암호화 오픈스sl 프로토콜 php7 실천

9049 단어
온라인 자료에 따르면 RSA 암호화 알고리즘은 비대칭 암호화 알고리즘이다.RSA는 공개 키 암호화 및 전자 상거래에서 널리 사용되고 있습니다.RSA는 1977년 로널드 리베스터(RON RIVEST), 아디 서모어(ADI SHAMIR)와 레너드 아드만(LEONARD ADLEMAN)이 함께 제안했다.당시 그들 세 사람은 모두 마성이공대학에서 일했다.RSA는 그들 세 사람의 성 이니셜을 한데 모아 만든 것이다.
업무 중에 민감한 데이터에 대한 복호화 수요가 자주 나타난다. 예를 들어 자신의 현재 금융회사가 관련된 사용자 거래 데이터, 사용자 신분 식별 검증 등이다.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)
암호 장치 내부 데이터의 조직 구조를 정의했다.
 
 

좋은 웹페이지 즐겨찾기