robinpowered / php-ntlm
NTLM身份验证协议的消息编码/解码器和密码哈希器
v0.5.0
2019-04-24 17:35 UTC
Requires
- php-64bit: >=7.1.0
Requires (Dev)
- ext-hash: *
- ext-iconv: *
- ext-mbstring: *
- ext-mcrypt: *
- ext-openssl: *
- ext-spl: *
- paragonie/random_compat: ^2.0
- phpunit/php-code-coverage: ^2.2
- phpunit/phpunit: ^4.7
- squizlabs/php_codesniffer: ^2.3
Suggests
- paragonie/random_compat: Allows for more cryptographically secure random data generation during the NTLM hashing process
README
PHP-NTLM是一个库,用于处理NTLM身份验证协议挑战-响应流程中使用的消息的编码和解码,同时提供可注入的凭证哈希机制,以允许更安全的凭证存储版本(而不是将密码以“纯文本”形式存储)。
特性
- NTLM客户端消息编码和解码
- 支持多种文本编码本地扩展
- 支持LM、NTv1和NTv2哈希算法
要求
- 64位PHP运行时(NTLM协商位标志超出32位整数大小)
- PHP
>=7.1.0
安装
- 获取Composer
- 将
robinpowered/php-ntlm
添加到您的Composer依赖项中:composer require robinpowered/php-ntlm
- 包含Composer自动加载器
示例用法
// Using Guzzle $client = new Client(); $request = new Request('get', 'https://my-exchange-url.com'); $user_name = 'user_name'; $password = 'password'; $target_name = 'target_name'; $host_name = 'host_name'; $encoding_converter = new MbstringEncodingConverter(); $random_byte_generator = new NativeRandomByteGenerator(); $hasher_factory = HasherFactory::createWithDetectedSupportedAlgorithms(); $negotiate_message_encoder = new NegotiateMessageEncoder($encoding_converter); $challenge_message_decoder = new ChallengeMessageDecoder(); $keyed_hasher_factory = KeyedHasherFactory::createWithDetectedSupportedAlgorithms(); $nt1_hasher = new NtV1Hasher($hasher_factory, $encoding_converter); $nt2_hasher = new NtV2Hasher($nt1_hasher, $keyed_hasher_factory, $encoding_converter); $authenticate_message_encoder = new NtlmV2AuthenticateMessageEncoder( $encoding_converter, $nt2_hasher, $random_byte_generator, $keyed_hasher_factory ); $negotiate_message = $negotiate_message_encoder->encode( $target_name, $host_name ); // Send negotiate message $request->setHeader('Authorization', sprintf('NTLM %s', base64_encode($negotiate_message))); $response = $client->send($request); // Decode returned challenge message $authenticate_headers = $response->getHeaderAsArray('WWW-Authenticate'); foreach ($authenticate_headers as $header_string) { $ntlm_matches = preg_match('/NTLM( (.*))?/', $header_string, $ntlm_header); if (0 < $ntlm_matches && isset($ntlm_header[2])) { $raw_server_challenge = base64_decode($ntlm_header[2]); break; } } $server_challenge = $challenge_message_decoder->decode($raw_server_challenge); $authenticate_message = $authenticate_message_encoder->encode( $user_name, $target_name, $host_name, new Password($password), $server_challenge ); // Send authenticate message $request->setHeader('Authorization', sprintf('NTLM %s', base64_encode($authenticate_message))); $client->send($request);
待办事项
- LM哈希
- NTv1哈希
- NTv2哈希
- NTLM协商消息编码
- NTLM挑战消息解码
- 消息结构和数据验证
- 协商标志解码
- 服务器挑战“nonce”处理
- TargetName解析/处理
- (可选) TargetInfo解析/处理
- (可选) AV_PAIR解码
- (可选) 版本解析/处理(仅用于调试目的)
- NTLM认证消息编码
- NTLM v1响应支持
- NTLM v2响应支持
- 扩展会话安全性(NTLM2会话密钥)支持
- (附加功能) 加密会话密钥交换支持
- 数据报(无连接)支持
- 测试
许可
PHP-NTLM遵循Apache License, Version 2.0许可。
版权所有 2019 Robin Powered, Inc.
遵循Apache License, Version 2.0(“许可”);除非适用法律要求或经书面同意,否则不得使用此文件,除非符合许可。您可以在以下位置获取许可副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或经书面同意,否则在许可下分发的软件按照“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可的具体语言规定权限和限制,请参阅许可。