79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								require __DIR__ . '/../vendor/autoload.php';
							 | 
						||
| 
								 | 
							
								function eq($a, $b)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    if ($a !== $b) {
							 | 
						||
| 
								 | 
							
								        print_r([$a, '!==', $b]);
							 | 
						||
| 
								 | 
							
								        throw new \Exception('error');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    print_r([$a, $b, 'true']);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$data = str_repeat('阿斯顿发到付eeee', 160);
							 | 
						||
| 
								 | 
							
								$str_len = strlen($data);
							 | 
						||
| 
								 | 
							
								// md5 签名
							 | 
						||
| 
								 | 
							
								$sign = md5($data);
							 | 
						||
| 
								 | 
							
								// 加密key必须为16位
							 | 
						||
| 
								 | 
							
								$key = hex2bin(md5(1));
							 | 
						||
| 
								 | 
							
								$iv = hex2bin(md5(2));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$sm4 = new \OneSm\Sm4($key);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo "\n --- ecb --- \n";
							 | 
						||
| 
								 | 
							
								// 加密ecb
							 | 
						||
| 
								 | 
							
								$d = $sm4->enDataEcb($data);
							 | 
						||
| 
								 | 
							
								// 加密后的长度和原数据长度一致
							 | 
						||
| 
								 | 
							
								eq(strlen($d), $str_len);
							 | 
						||
| 
								 | 
							
								// 解密ecb
							 | 
						||
| 
								 | 
							
								$d = $sm4->deDataEcb($d);
							 | 
						||
| 
								 | 
							
								// 解密后和原数据相等
							 | 
						||
| 
								 | 
							
								eq(md5($d), $sign);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo "\n --- cbc --- \n";
							 | 
						||
| 
								 | 
							
								// 加密cbc
							 | 
						||
| 
								 | 
							
								$d = $sm4->enDataCbc($data, $iv);
							 | 
						||
| 
								 | 
							
								// 加密后的长度和原数据长度一致
							 | 
						||
| 
								 | 
							
								eq(strlen($d), $str_len);
							 | 
						||
| 
								 | 
							
								// 解密cbc
							 | 
						||
| 
								 | 
							
								$d = $sm4->deDataCbc($d, $iv);
							 | 
						||
| 
								 | 
							
								// 解密后和原数据相等
							 | 
						||
| 
								 | 
							
								eq(md5($d), $sign);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo "\n --- ofb --- \n";
							 | 
						||
| 
								 | 
							
								// 加密ofb
							 | 
						||
| 
								 | 
							
								$d = $sm4->enDataOfb($data, $iv);
							 | 
						||
| 
								 | 
							
								// 加密后的长度和原数据长度一致
							 | 
						||
| 
								 | 
							
								eq(strlen($d), $str_len);
							 | 
						||
| 
								 | 
							
								// 解密ofb
							 | 
						||
| 
								 | 
							
								$d = $sm4->deDataOfb($d, $iv);
							 | 
						||
| 
								 | 
							
								// 解密后和原数据相等
							 | 
						||
| 
								 | 
							
								eq(md5($d), $sign);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo "\n --- cfb --- \n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 加密cfb
							 | 
						||
| 
								 | 
							
								$d = $sm4->enDatacfb($data, $iv);
							 | 
						||
| 
								 | 
							
								// 加密后的长度和原数据长度一致
							 | 
						||
| 
								 | 
							
								eq(strlen($d), $str_len);
							 | 
						||
| 
								 | 
							
								// 解密cfb
							 | 
						||
| 
								 | 
							
								$d = $sm4->deDatacfb($d, $iv);
							 | 
						||
| 
								 | 
							
								// 解密后和原数据相等
							 | 
						||
| 
								 | 
							
								eq(md5($d), $sign);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo "\n --- ctr --- \n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 加密ctr
							 | 
						||
| 
								 | 
							
								$d = $sm4->enDataCtr($data, $iv);
							 | 
						||
| 
								 | 
							
								// 加密后的长度和原数据长度一致
							 | 
						||
| 
								 | 
							
								eq(strlen($d), $str_len);
							 | 
						||
| 
								 | 
							
								// 解密ctr
							 | 
						||
| 
								 | 
							
								$d = $sm4->deDataCtr($d, $iv);
							 | 
						||
| 
								 | 
							
								// 解密后和原数据相等
							 | 
						||
| 
								 | 
							
								eq(md5($d), $sign);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//ecb/cbc/cfb/ofb/ctr
							 |