이 글은 주로 PHP의 openssl 암호화 확장 사용에 대한 요약을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.
소개
인터넷 발전의 역사에서 보안은 항상 개발자가 매우 중요하게 생각하는 주제였습니다. 데이터 전송 보안을 달성하려면 다음을 보장해야 합니다. 위조된 요청), 데이터 무결성(수정되지 않음), 데이터 개인 정보 보호(암호화된 텍스트, 직접 읽을 수 없음) 등 SSL/TLS 프로토콜에 의해 구현된 HTTPS 프로토콜이 이미 있지만 이는 클라이언트의 브라우저의 올바른 구현에 의존하며 매우 비효율적입니다. 따라서 일반적인 민감한 데이터(예: 거래 결제 정보 등)에는 여전히 우리가 필요합니다. 암호화 방법을 사용하여 수동으로 암호화합니다.
일반 웹 개발자가 일부 기본 보안 관련 기술에 대해 깊이 이해할 필요는 없지만 암호화의 기본을 배우고 기존 암호화 관련 도구를 사용하는 것은 매우 필요합니다. 업무상의 필요로 인해 암호화 관련 글을 몇 편 읽고 제 경험을 바탕으로 이 글을 완성했습니다.
암호화 기초
암호화 사용 방법을 배우기 전에 암호화와 관련된 몇 가지 기본 지식을 이해해야 합니다.
암호화 알고리즘은 일반적으로 대칭 암호화 알고리즘과 비대칭 암호화 알고리즘의 두 가지 유형으로 나뉩니다.
대칭 암호화
대칭 암호화 알고리즘은 메시지를 보내는 사람과 받는 사람이 동일한 키를 사용하여 파일을 암호화하고, 받는 사람은 동일한 키를 사용하여 암호를 해독하고 가져옵니다. 정보. 일반적인 대칭 암호화 알고리즘은 다음과 같습니다: des/aes/3des 대칭 암호화 알고리즘의 특징은 다음과 같습니다. 빠르며 암호화 전후에 파일 크기가 크게 변하지 않지만 발신자와 암호화 후 키 저장이 큰 문제입니다. 메시지를 받는 사람 중 한 쪽의 키가 분실되면 정보 전송이 안전하지 않게 됩니다.
비대칭 암호화대칭 암호화의 반대말은 비대칭 암호화입니다. 비대칭 암호화의 핵심 아이디어는 공개 키와 개인 키로 나누어진 한 쌍의 상대 키를 사용하는 것입니다. 안전하게 보관하고 공개 키를 공개합니다. 공개 키와 개인 키는 한 쌍입니다. 공개 키를 사용하여 데이터를 암호화하면 해당 개인 키만 사용하여 데이터를 암호화할 수 있고, 개인 키를 사용하여 데이터를 암호화하면 해당 공개 키만 사용할 수 있습니다. 그것을 해독하는 데 사용할 수 있습니다. 데이터를 보내기 전에 수신자의 공개 키를 사용하여 데이터를 암호화하세요. 일반적인 비대칭 암호화 알고리즘에는 RSA/DSA가 포함됩니다.
비대칭 암호화에는 키 저장 문제가 없지만 많은 양의 계산이 필요하고 암호화 속도가 매우 느립니다.
디지털 서명데이터의 무결성을 보장하려면 해시 함수를 통해 해시 값을 계산해야 합니다. 이 해시 값을 디지털 서명이라고 합니다. 그 특징은 다음과 같습니다.
•원래 데이터가 아무리 크더라도 결과의 길이는 동일합니다.
•입력은 동일하고 출력은 동일합니다.•입력을 조금만 변경하면 큰 변화가 발생합니다. 결과적으로
•암호화 프로세스는 되돌릴 수 없으며 해시 값을 통해 원본 데이터를 얻을 수 없습니다.
PHP의 openssl 확장openssl 확장은 암호화 및 암호 해독과 관련된 여러 PHP 기능을 캡슐화하는 openssl 암호화 확장 패키지를 사용하여 데이터의 암호화 및 암호 해독을 크게 촉진합니다. 일반적으로 사용되는 기능은 다음과 같습니다.
대칭 암호화 관련: string openssl_encrypt (string $data, string $method, string $password)
여기서 $data는 암호화할 데이터이고 $method는 암호화입니다. $password는 사용할 키이며, 함수는 암호화된 데이터를 반환합니다.
$method 목록은 openssl_get_cipher_methods()를 사용하여 얻을 수 있습니다. $method 목록은 다음과 같습니다. :
Array( 0 => aes-128-cbc, // aes加密 1 => des-ecb, // des加密 2 => des-ede3, // 3des加密 ... )
복호화 기능은 string openssl_encrypt (string $data, string $method, string $password)
비대칭 암호화 관련:openssl_get_publickey();openssl_pkey_get_public(); // 从证书导出公匙; openssl_get_privatekey();openssl_pkey_get_private(); // 从证书导出私匙;
모두 통과만 하면 됩니다. 인증서 파일(일반적으로 .pem 파일)에서
openssl_public_encrypt(string $data , string &$crypted , mixed $key [, int $padding = OPENSSL\_PKCS1\_PADDING ] )
공개 키를 사용하여 데이터를 암호화합니다. 여기서 $data는 암호화할 데이터이며, 암호화된 데이터가 저장됩니다. $key는 암호화할 데이터입니다. 암호화된 데이터는 정확히 암호화 비트의 정수배가 아닐 수 있으므로 $padding 옵션에는 각각 OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING이 포함됩니다. PKCS1 패딩 또는 패딩 없음
이 방법의 반대는 다음과 같습니다(입력 매개변수가 일관됨):
openssl_private_encrypt(); // 使用私匙加密; openssl_private_decrypt(); // 使用私匙解密; openssl_private_decrypt(); // 使用公匙解密;
서명 및 확인 기능도 있습니다:
bool openssl_sign ( string $data , string &$signature , mixed $priv_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] ) int openssl_verify ( string $data , string $signature , mixed $pub_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] )
签名函数:$data为要签名的数据;$signature为签名结果的引用变量;$priv_key_id为签名所使用的私匙;$signature_alg为签名要使用的算法,其算法列表可以使用<span style="font-family:NSimsun">openssl_get_md_methods ()</span>
得到,形如:
array( 0 => MD5, 1 => SHA1, 2 => SHA256, ... )
验签函数:与签名函数相对,只不过它要传入与私匙对应的公匙;其结果为签名验证结果,1为成功,0为失败,-1则表示错误;
加密实例
以下是一个非对称加密使用的小例子:
// 获取公匙 $pub_key = openssl_get_publickey('test.pem'); $encrypted = ''; // 对数据分块加密 for ($offset = 0, $length = strlen($raw_msg); $offset < $length; $offset += $key_size){ $encryptedBlock = ''; $data = substr($raw_msg, $offset, $key_size) if (!openssl_public_encrypt($data, $encryptedBlock, $pub_key, OPENSSL_PKCS1_PADDING)){ return ''; } else { $encrypted .= $encryptedBlock; } return $encrypted;
而对称加密就非常简单了,直接使用ssl_encrypt()函数即可;
当然一些接口可能会对加密方法进行不同的要求,如不同的padding,加密块大小等等,这些就需要使用者自己调整了。
因为我们是在HTTP协议之上处理的数据,所以数据加密完成后,就可以直接发送了,不用再考虑底层的传输,使用cURL或SOAP扩展方法,就可以直接请求接口啦。
结语
密码学是一个十分高深的学科,它理论艰深,概念繁多,作为一个WEB开发人员,虽然不需要我们去研究其底层实现,但是学会使用封装好的方法很有利于我们开发。甚至了解其基本实现,也可以触类旁通,对算法等有新的理解。
以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
위 내용은 PHP openssl 암호화 확장 사용 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!