PHP OpenSSL 加密函数参考

  • PHP OpenSSL 加密函数

    要使用 PHP 的 OpenSSL 支持,你应该使用--with-openssl[=DIR] 参数来编译PHP。OpenSSL 库还在运行时对正常操作有额外的要求。最明显的是,OpenSSL需要访问随机或伪随机数生成器; 在大多数 Unix 和类 Unix 平台上(包括linux),意味着它必须要访问 /dev/urandom 或者 /dev/random 设备。
    注意: Win32 平台的用户请注意,为了使此扩展生效, DLL 文件必须能在 Windows 系统的 PATH 指示的路径下找到。虽然将 DLL 文件从 PHP 文件夹复制到 Windows 系统目录也行,但不建议这样做。 此扩展需要libeay32.dll文件在 PATH 路径中。 此外,如果打算使用密钥生成和证书签名功能,你需要在你的系统上安装一个可用的 openssl.cnf 文件。 在我们的 win32 二进制发行版本中,我们已经包含了一个示例配置文件,在 extras/openssl 文件夹中。 PHP 将会使用如下逻辑搜索 openssl.cnf 文件:
    • 如果 OPENSSL_CONF 环境变量设置了,该变量将会被当作配置文件的路径(含文件名)。
    • 如果 SSLEAY_CONF 环境变量设置了,该变量将会被当作配置文件的路径(含文件名)。
    • 假设openssl.cnf 文件将会在 openssl DLL 被编译时配置的默认证书区域被找到。这通常意味着默认的文件名是 c:\usr\local\ssl\openssl.cnf.
    在你的安装过程中,你需要决定是否将配置文件安装在c:\usr\local\ssl\openssl.cnf 或者使用环境变量(可能是基于每个虚拟主机的基础)来定位配置文件安装到其他地方。注意,可以使用引入配置文件的函数中的 configargs 参数来覆盖脚本中的默认路径。
    函数名称 描述
    openssl_cipher_iv_length 获取密码iv长度
    openssl_csr_export_to_file 将CSR导出到文件
    openssl_csr_export 将CSR作为字符串导出
    openssl_csr_get_public_key 返回CSR的公钥
    openssl_csr_get_subject 返回CSR的主题
    openssl_csr_new 生成一个 CSR
    openssl_csr_sign 用另一个证书签署 CSR (或者本身) 并且生成一个证书
    openssl_decrypt 解密数据
    openssl_dh_compute_key 计算远程DH密钥(公钥)和本地DH密钥的共享密钥
    openssl_digest 计算摘要
    openssl_encrypt 加密数据
    openssl_error_string 返回 openSSL 错误消息
    openssl_free_key 释放密钥资源
    openssl_get_cert_locations 检索可用的证书位置
    openssl_get_cipher_methods 获取可用的加密算法
    openssl_get_curve_names 获得ECC的可用曲线名称列表
    openssl_get_md_methods 获取可用的摘要算法
    openssl_get_privatekey 别名 openssl_pkey_get_private
    openssl_get_publickey 别名 openssl_pkey_get_public
    openssl_open 打开密封的数据
    openssl_pbkdf2 生成一个 PKCS5 v2 PBKDF2 字符串
    openssl_pkcs12_export_to_file 输出一个 PKCS#12 兼容的证书存储文件
    openssl_pkcs12_export 将 PKCS#12 兼容证书存储文件导出到变量
    openssl_pkcs12_read 将 PKCS#12 证书存储区解析到数组中
    openssl_pkcs7_decrypt 解密一个 S/MIME 加密的消息
    openssl_pkcs7_encrypt 加密一个 S/MIME 消息
    openssl_pkcs7_read 将PKCS7文件导出为PEM格式证书的数组
    openssl_pkcs7_sign 对一个 S/MIME 消息进行签名
    openssl_pkcs7_verify 校验一个已签名的 S/MIME 消息的签名
    openssl_pkey_export_to_file 将密钥导出到文件中
    openssl_pkey_export 将一个密钥的可输出表示转换为字符串
    openssl_pkey_free 释放一个私钥
    openssl_pkey_get_details 返回包含密钥详情的数组
    openssl_pkey_get_private 获取私钥
    openssl_pkey_get_public 从证书中解析公钥,以供使用。
    openssl_pkey_new 生成一个新的私钥
    openssl_private_decrypt 使用私钥解密数据
    openssl_private_encrypt 使用私钥加密数据
    openssl_public_decrypt 使用公钥解密数据
    openssl_public_encrypt 使用公钥加密数据
    openssl_random_pseudo_bytes 生成一个伪随机字节串
    openssl_seal 密封 (加密) 数据
    openssl_sign Generate signature
    openssl_spki_export_challenge 导出与签名公钥和挑战相关的挑战字符串
    openssl_spki_export 通过签名公钥和挑战导出一个可用的PEM格式的公钥
    openssl_spki_new 生成一个新的签名公钥和挑战
    openssl_spki_verify 验证签名公钥和挑战。
    openssl_verify 验证签名
    openssl_x509_check_private_key 检查私钥是否对应于证书
    openssl_x509_checkpurpose 验证是否可以为特定目的使用证书
    openssl_x509_export_to_file 导出证书至文件
    openssl_x509_export 以字符串格式导出证书
    openssl_x509_fingerprint 计算一个给定的x.509证书的指纹或摘要
    openssl_x509_free 释放证书资源
    openssl_x509_parse 解析一个X509证书并作为一个数组返回信息
    openssl_x509_read 解析一个x.509证书并返回一个资源标识符
  • PHP OpenSSL 常量

    常量 描述
    注意: 目的检查标志
    X509_PURPOSE_SSL_CLIENT  
    X509_PURPOSE_SSL_SERVER  
    X509_PURPOSE_NS_SSL_SERVER  
    X509_PURPOSE_SMIME_SIGN  
    X509_PURPOSE_SMIME_ENCRYPT  
    X509_PURPOSE_CRL_SIGN  
    X509_PURPOSE_ANY  
    非对称加密的填充标志
    OPENSSL_PKCS1_PADDING  
    OPENSSL_SSLV23_PADDING  
    OPENSSL_NO_PADDING  
    OPENSSL_PKCS1_OAEP_PADDING  
    密钥类型
    OPENSSL_KEYTYPE_RSA  
    OPENSSL_KEYTYPE_DSA  
    OPENSSL_KEYTYPE_DH  
    OPENSSL_KEYTYPE_EC 这个常量只有在使用OpenSSL 0.9.8+进行编译时才可用。这个常量是在5.2.0版本中添加的.
    PKCS7 标志/常量,S/MIME 函数使用通过一个位阈来表示的标志位,这些常量在 4.0.6 版本中被添加,该位阈可包含如下一个或多个值:
    PKCS7_TEXT 把纯文本类型的header头添加到加密/签名的消息中。如果解密或者验证,将会从输出中剥离这些header头 - 如果这些被解密或验证的消息不是 MIME 类型的纯文本文件将会导致一个错误。
    PKCS7_BINARY 通常输入消息将被转成以CR和LF作行末的 "canonical" 格式(S/MIME规范中的声明)。当该选项出现时,消息将不会被转化。 当处理非MIME格式的二进制数据时,这个选项会很有用。
    PKCS7_NOINTERN 在验证消息时,在消息中包含的证书(如果有的话)通常会被搜索签名证书。 对于该选项,只有当 openssl_pkcs7_verify() 函数的参数extracerts指定了的证书才会被使用。然而提供的证书仍然被当做不受信任的证书使用。
    PKCS7_NOVERIFY 不要验证签名消息的签名者证书。
    PKCS7_NOCHAIN 不要约束验证签名者证书:不要把签名消息中的证书当做不受信任的证书。
    PKCS7_NOCERTS 在签署消息时,签名者的证书通常包括在内,但是有了这个选项后,就不需要包括证书了。这将会缩小被签名消息的大小,但是验证人在本地必须有可用的签名者证书副本(比如由openssl_pkcs7_verify()函数中的extracerts参数传递) 。
    PKCS7_NOATTR 通常当消息被签名了,一些属性的集合将会包含在内,比如签名时间和支持的对称算法。使用该选项用来设置不包含这些属性。
    PKCS7_DETACHED 当签名消息时,使用 MIME 类型("multipart/signed")的明文签名。如果你为openssl_pkcs7_sign()函数没有指定任何flags,这个将会是默认的值。 如果你关闭这个选项,消息将使用不透明的签名来签名, 这将会使消息更能抵抗邮件中继的翻译,但是不支持 S/MIME 的邮件客户端将不能读取该消息。
    PKCS7_NOSIGS 不要尝试在消息中验证签名
    签名算法
    这些常量是在5.0.0版本中添加的。OPENSSL_ALGO_MD2, OPENSSL_ALGO_MD4, OPENSSL_ALGO_MD5, OPENSSL_ALGO_SHA1, OPENSSL_ALGO_DSS1
    这些常量是在5.4.8版本中添加的。OPENSSL_ALGO_RMD160, OPENSSL_ALGO_SHA224, OPENSSL_ALGO_SHA256, OPENSSL_ALGO_SHA384, OPENSSL_ALGO_SHA512
    OPENSSL_ALGO_DSS1  
    OPENSSL_ALGO_SHA1   openssl_sign() 和 openssl_verify() 函数使用的默认算法。
    OPENSSL_ALGO_SHA224  
    OPENSSL_ALGO_SHA256  
    OPENSSL_ALGO_SHA384  
    OPENSSL_ALGO_SHA512  
    OPENSSL_ALGO_RMD160  
    OPENSSL_ALGO_MD5  
    OPENSSL_ALGO_MD4  
    OPENSSL_ALGO_MD2   在PHP 5.2.13和PHP 5.3.2中,只有在使用MD2支持编译PHP时,才可以使用这个常量。 当在编译PHP时需要验证通过 DHAVE_OPENSSL_MD2_H CFLAGP, 当编译 OpenSSL 1.0.0+ 版本时需要启用 enable-md2选项。
    密码
    OPENSSL_CIPHER_RC2_40  这些常量是在4.3.0版本中添加的。
    OPENSSL_CIPHER_RC2_128  这些常量是在4.3.0版本中添加的。
    OPENSSL_CIPHER_RC2_64  这些常量是在4.3.0版本中添加的。
    OPENSSL_CIPHER_DES  这些常量是在4.3.0版本中添加的。
    OPENSSL_CIPHER_3DES  这些常量是在4.3.0版本中添加的。
    OPENSSL_CIPHER_AES_128_CBC  这些常量是在5.4.0版本中添加的。
    OPENSSL_CIPHER_AES_192_CBC  这些常量是在5.4.0版本中添加的。
    OPENSSL_CIPHER_AES_256_CBC  这些常量是在5.4.0版本中添加的。
    版本常数
    OPENSSL_VERSION_TEXT  这些常量是在5.2.0版本中添加的。
    OPENSSL_VERSION_NUMBER  这些常量是在5.2.0版本中添加的。
    服务器名称指示常数
    OPENSSL_TLSEXT_SERVER_NAME SNI 支持是否可用。这个常量是在5.3.2版本中添加的,并且要求PHP是由OpenSSL 0.9.8j及以上版本构建的。