跳转到帖子

搜索论坛

显示结果为标签'钉钉'。



更多搜索选项

  • 用标签来搜索

    用逗号分隔标签类型
  • 用作者来搜索

内容类型


论坛

  • 编程技术
    • C/C++
    • C#
    • PHP
    • JAVA
    • Linux
    • React
    • 编程QA
    • 武林秘籍
    • go语言
    • 开源框架
  • 交流
    • 转贴交流
    • 酷站分享
    • 游戏素材
    • 软件下载
    • 视频教程资料

Product Groups

没有可显示的结果。

博客

  • 墨香年少的博客

查找结果在...

查找包含的结果...


创建日期

  • 开始

    结束


最后更新

  • 开始

    结束


用数量来过滤...

注册日期

  • 开始

    结束


用户组


找到1个结果

  1. <?php class DingCallbackCrypto { private $m_token; private $m_encodingAesKey; private $m_corpId; function __construct() { $this->m_token = "AAAAAAAAAAAAA"; $this->m_encodingAesKey = "BBBBBBBBBBBBBBBBBBBBBBBB"; $this->m_corpId = "CCCCCCCCCCCCCC"; } public function getEncryptedMap($plain){ $timeStamp = time(); $pc = new Prpcrypt($this->m_encodingAesKey); $nonce= $pc->getRandomStr(); return $this->getEncryptedMapDetail($plain, $timeStamp, $nonce); } public function getEncryptedMapDetail($plain, $timeStamp, $nonce) { $pc = new Prpcrypt($this->m_encodingAesKey); $array = $pc->encrypt($plain, $this->m_corpId); $ret = $array[0]; if ($ret != 0) { throw new Exception('AES加密错误',ErrorCode::$EncryptAESError); } if ($timeStamp == null) { $timeStamp = time(); } $encrypt = $array[1]; $sha1 = new SHA1; $array = $sha1->getSHA1($this->m_token, $timeStamp, $nonce, $encrypt); $ret = $array[0]; if ($ret != 0) { throw new Exception('ComputeSignatureError',ErrorCode::$ComputeSignatureError); } $signature = $array[1]; $encryptMsg = json_encode(array( "msg_signature" => $signature, "encrypt" => $encrypt, "timeStamp" => $timeStamp, "nonce" => $nonce )); return $encryptMsg; } public function getDecryptMsg($signature, $timeStamp = null, $nonce, $encrypt) { if (strlen($this->m_encodingAesKey) != 43) { throw new Exception('IllegalAesKey',ErrorCode::$IllegalAesKey); } $pc = new Prpcrypt($this->m_encodingAesKey); if ($timeStamp == null) { $timeStamp = time(); } $sha1 = new SHA1; $array = $sha1->getSHA1($this->m_token, $timeStamp, $nonce, $encrypt); $ret = $array[0]; if ($ret != 0) { throw new Exception('ComputeSignatureError',ErrorCode::$ComputeSignatureError); } $verifySignature = $array[1]; if ($verifySignature != $signature) { throw new Exception('ValidateSignatureError',ErrorCode::$ValidateSignatureError); } $result = $pc->decrypt($encrypt, $this->m_corpId); if ($result[0] != 0) { throw new Exception('DecryptAESError',ErrorCode::$DecryptAESError); } $decryptMsg = $result[1]; return $decryptMsg; } } class SHA1 { public function getSHA1($token, $timestamp, $nonce, $encrypt_msg) { try { $array = array($encrypt_msg, $token, $timestamp, $nonce); sort($array, SORT_STRING); $str = implode($array); return array(ErrorCode::$OK, sha1($str)); } catch (Exception $e) { print $e . "\n"; return array(ErrorCode::$ComputeSignatureError, null); } } } class ErrorCode { public static $OK = 0; public static $IllegalAesKey = 900004; public static $ValidateSignatureError = 900005; public static $ComputeSignatureError = 900006; public static $EncryptAESError = 900007; public static $DecryptAESError = 900008; public static $ValidateSuiteKeyError = 900010; } class PKCS7Encoder { public static $block_size = 32; function encode($text) { $block_size = PKCS7Encoder::$block_size; $text_length = strlen($text); $amount_to_pad = PKCS7Encoder::$block_size - ($text_length % PKCS7Encoder::$block_size); if ($amount_to_pad == 0) { $amount_to_pad = PKCS7Encoder::block_size; } $pad_chr = chr($amount_to_pad); $tmp = ""; for ($index = 0; $index < $amount_to_pad; $index++) { $tmp .= $pad_chr; } return $text . $tmp; } function decode($text) { $pad = ord(substr($text, -1)); if ($pad < 1 || $pad > PKCS7Encoder::$block_size) { $pad = 0; } return substr($text, 0, (strlen($text) - $pad)); } } class Prpcrypt { public $key; function __construct($k) { $this->key = base64_decode($k . "="); } public function encrypt($text, $corpid) { try { $random = $this->getRandomStr(); $text = $random . pack("N", strlen($text)) . $text . $corpid; $iv = substr($this->key, 0, 16); $pkc_encoder = new PKCS7Encoder; $text = $pkc_encoder->encode($text); $encrypted = openssl_encrypt($text, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv ); return array(ErrorCode::$OK, base64_encode($encrypted)); } catch (Exception $e) { print $e; return array(ErrorCode::$EncryptAESError, null); } } public function decrypt($encrypted, $corpid) { try { $ciphertext_dec = base64_decode($encrypted); $iv = substr($this->key, 0, 16); $decrypted = openssl_decrypt ( $ciphertext_dec, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv ); } catch (Exception $e) { return array(ErrorCode::$DecryptAESError, null); } try { $pkc_encoder = new PKCS7Encoder; $result = $pkc_encoder->decode($decrypted); if (strlen($result) < 16) return ""; $content = substr($result, 16, strlen($result)); $len_list = unpack("N", substr($content, 0, 4)); $xml_len = $len_list[1]; $xml_content = substr($content, 4, $xml_len); $from_corpid = substr($content, $xml_len + 4); } catch (Exception $e) { print $e; return array(ErrorCode::$DecryptAESError, null); } if ($from_corpid != $corpid) return array(ErrorCode::$ValidateSuiteKeyError, null); return array(0, $xml_content); } function getRandomStr() { $str = ""; $str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max = strlen($str_pol) - 1; for ($i = 0; $i < 16; $i++) { $str .= $str_pol[mt_rand(0, $max)]; } return $str; } } function dispatch(){ $crypt = new DingCallbackCrypto(); $res = $crypt->getEncryptedMap("success"); $data = json_decode($res); header('Content-type: application/json'); //echo '{"msg_signature":"'.$data->msg_signature.'","timeStamp":"'.$data->timeStamp.'","nonce":"'.$data->nonce.'","encrypt":"'.$data->encrypt.'"}';die(); echo json_encode($data);die(); //$text = $crypt->getDecryptMsg($data->msg_signature, $data->timeStamp, $data->nonce, $data->encrypt); //echo $text;die(); } dispatch(); ?>
×
×
  • 创建新的...

重要信息

注册必须使用2-8个中文汉字作为账号