mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 12:57:32 +08:00
61 lines
3.1 KiB
PHP
61 lines
3.1 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* 验证RSA加密的随机性
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
// 定义应用目录
|
|||
|
|
define('APP_PATH', __DIR__ . '/application/');
|
|||
|
|
|
|||
|
|
// 加载框架引导文件
|
|||
|
|
require __DIR__ . '/thinkphp/base.php';
|
|||
|
|
|
|||
|
|
// 手动引入需要的类文件
|
|||
|
|
require __DIR__ . '/addons/shopro/library/ccblife/CcbRSA.php';
|
|||
|
|
|
|||
|
|
use addons\shopro\library\ccblife\CcbRSA;
|
|||
|
|
|
|||
|
|
echo "\n========== RSA加密随机性验证 ==========\n\n";
|
|||
|
|
|
|||
|
|
// 使用demo密钥
|
|||
|
|
$publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC+8V1Or6R6H3a7TjuvoDa5k0W/niEGg4N+0Nni+KfwHVX05pI7Qdq1J5+q31yORAoiSSNZNW4uWykmeSltC2mHGkQXClU4JmMXnWFyRCENw1iDIIIEsNax4jFBZUaDCn69PxWgp5wwk+d0V7QRYZ9jkgUaJK+BSYa0KMraxVfJwIDAQAB';
|
|||
|
|
$privateKey = 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAML7xXU6vpHofdrtOO6+gNrmTRb+eIQaDg37Q2eL4p/AdVfTmkjtB2rUnn6rfXI5ECiJJI1k1bi5bKSZ5KW0LaYcaRBcKVTgmYxedYXJEIQ3DWIMgggSw1rHiMUFlRoMKfr0/FaCnnDCT53RXtBFhn2OSBRokr4FJhrQoytrFV8nAgMBAAECgYEAizhN0thw/altQ4YiIoWvZ50M6iAkWN5prp37kNGWrM40etNB1FQ5+ZN636L+3THVUbwqdzLKTy1GX3jqg05VUIf0sKYYepp+skwZmHVprz4EUKsZXRa+3MnMChJcyHdlyuUNs6HriMq6Qc1+fFEOtZFAf3lo2wYNFw5vIKHGQRECQQDxVKa+6m4y7LmWgiGLYghuL/SGXySFhwBh5+zMNl8V7aAbTX/tH6A0s8JXsSI4iChjWPXthKFTrd7h62vJBjeFAkEAztXpNehF18g3e6JEhtjbTmMsgyj13gdSZSRwjO0Y+IsDI1afnZXzwv96OlukGK8185z0bsbhTCOd6rkcRTnduwJBAOqGknlMh4VTylO66PB0d67lSaPgCDT/al67LcOTPzqnMAX4fc6qAl3VJ5Ni39fCckWB6ZVGZCVW/hfdWmUEdqUCQFFWNXuJd82/YnIwAZq1tKhCv8JkXSuO3YwApHIG2wcCQ52l9ubVjSJlrP8+Am3imOjQFB9r/jUe3H7thHyEoPkCQCay3waa0ll2DY+epkrrF/QO7aMa6NIUArRgWUmqw+1/45csBiWPMUrAD/CPDUr9Jvte92NjoAlz649csbgMM3w=';
|
|||
|
|
|
|||
|
|
$message = "Hello, CCB!";
|
|||
|
|
|
|||
|
|
echo "原始明文: $message\n\n";
|
|||
|
|
echo "连续加密同一明文3次,观察密文差异:\n\n";
|
|||
|
|
|
|||
|
|
$ciphertexts = [];
|
|||
|
|
for ($i = 1; $i <= 3; $i++) {
|
|||
|
|
$encrypted = CcbRSA::encryptForCcb($message, $publicKey);
|
|||
|
|
$encrypted = str_replace(["\r", "\n", "\r\n"], '', $encrypted);
|
|||
|
|
$ciphertexts[] = $encrypted;
|
|||
|
|
|
|||
|
|
echo "第{$i}次加密:\n";
|
|||
|
|
echo " 密文(前80字符): " . substr($encrypted, 0, 80) . "...\n";
|
|||
|
|
echo " 密文长度: " . strlen($encrypted) . " 字节\n";
|
|||
|
|
|
|||
|
|
// 验证能否解密
|
|||
|
|
$decrypted = CcbRSA::decrypt($encrypted, $privateKey);
|
|||
|
|
echo " 解密结果: $decrypted\n";
|
|||
|
|
echo " 解密成功: " . ($decrypted === $message ? "✓ 是" : "✗ 否") . "\n\n";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 对比三次密文
|
|||
|
|
echo "========== 密文对比 ==========\n\n";
|
|||
|
|
echo "第1次 vs 第2次: " . ($ciphertexts[0] === $ciphertexts[1] ? "相同" : "✗ 不同") . "\n";
|
|||
|
|
echo "第2次 vs 第3次: " . ($ciphertexts[1] === $ciphertexts[2] ? "相同" : "✗ 不同") . "\n";
|
|||
|
|
echo "第1次 vs 第3次: " . ($ciphertexts[0] === $ciphertexts[2] ? "相同" : "✗ 不同") . "\n";
|
|||
|
|
|
|||
|
|
echo "\n========== 结论 ==========\n\n";
|
|||
|
|
echo "✓ RSA加密每次结果都不同(正常现象)\n";
|
|||
|
|
echo "✓ 但每次都能正确解密回原始明文\n";
|
|||
|
|
echo "✓ 这是RSA PKCS1 Padding的安全特性\n\n";
|
|||
|
|
echo "【对建行接口的影响】\n";
|
|||
|
|
echo "- 每次发送的cnt密文都不同 → 正常\n";
|
|||
|
|
echo "- 建行服务器用他们的私钥能解密 → 关键\n";
|
|||
|
|
echo "- 489错误不是因为密文不同,而是:\n";
|
|||
|
|
echo " 1. 建行没有你的公钥备案\n";
|
|||
|
|
echo " 2. 服务方编号(svcid)与密钥不匹配\n";
|
|||
|
|
echo " 3. 商户信息配置错误\n\n";
|