Browse Source

commit crypt info

superbee315 5 years ago
parent
commit
a176466d9e

+ 3 - 2
application/index/controller/Index.php

@@ -22,7 +22,6 @@ class Index extends Controller
     public function encrypt()
     {    	
     	$short = $this->request->post('short');
-    	
     	$short .= $time = time(); 
     	
     	$str = 'gHr6BvYb6Pxrg4l8AfR3j1JrQx3RxI3IbQZ+3T2cNylK5Iw/V6xPhNwJamsNIiZPk+cvpYKd67HGrCDz6LP1UijmaSVVRqfPxnJ5X/dlJ4TeeA8qWO8NdHRAWb6u5f1z7LZ4evNYRO+67nn3gZN9BFmvXLk0sgIcAdBs2VsRaNR3Ao7ra5knlGVib7k6LpfJOKtQdoeF7zqCf1uqgOuvJPkR6hl0u+uqGBe9mtw96ypWACcL2mafP0P5DtLc8zVYbud6i+7ANe1LMvlD0JcwaHkHIwR1EFcScI8uzgXtA3ZLf78I/OlGfFnkE2/7PrAdSssCjmPMuCO0a25hAyOi+Xi5Bz8ILCo3+XleUPzAS+cTSidPk1FR4DTIL8WpQfcxbRvjIyp4Z9uXbhhfmONXhnu09RHsvBiNFOYQX2v1l30tf250xfaRCpBHWXOEzwtBwp+C722JAWg3Rpt0P+aRGaRRnBrkCfam6i+q1FJBapN3y5sd7xn2kwAGg2mFXB0bCn7YTTGGuXsSj/sItaRSvlNRA3iTHRE8ETgfFytDEh+ci5f9qXrv2nqoN66TuWDnedKMixw7kLp6geazeyvbSjGOp78nskToixfFza2mcgHxx+rFg8IMJjf1//kDHZYZsMh8tu6gkXypRMGOsTi/yPwiAzC0+PS+xDPU4pDKV+xayrlL1l5eJleSb4HlOQ6JJU4Q1pF9E6LqnyDwDQGPbEVLgA2+MFQcuKHMvQJS60dM6awNQLcmDMOkD4hySdAnxcz7FN57f7ayw/EBOMaJtn2RQc0r5QbVdquFUJsvg3y+16HjCi3C5bp78kTWCkWA9PqNLIYkCfnD524JqpI5pSoURKxIHlDKkhlAjbjNm2X/W2khM3cwlQ18wV/rbzLXjfZaZgq/1dnZOOHniCQMvoS8w0M4yiuyO8JEW0TcRL5cM5bYn3V5PwqpGiyhTI0oHNCpu9AZHBxysL/tqzloZyaV4MFuZTV5JFizj5nER+4Kf5DRK566kFMwgq17hhRbgHO+yVkT4ugkfMYebyH+EXylrdRBzCvwoprrocQwPsQ0wsfa7FzWn05MPaL+mWUfmQzemuBYJ9j/y1m4cZnfTafJkzKOF9oPGeNcNseKMwllK2n5PbwVMkebD++nOwTERwRF9GZ4SJsY5psUIm6TQH6JPATphyd6oi6Nvnxlx9q6v9EtzZ0wxqB8FukGpu6fAt6gvzZdPeJFOe4XaOb68WeAuGjYA2rw8g4i9l6xKPVqRFrtOmYC7gZL7Yk36qmouTT1cM80TWKQkXvDT0WHy67z7cmQ2AIRlY4SdggdGdEwmam5uqcZHFAOypWYegzey+u4vIbxO7vWRMHM6sQfSw==';
@@ -31,12 +30,14 @@ class Index extends Controller
     	return json(['sign'=>$tmp, 'time'=>$time]);
     }
     
-    public function decrypt() {
+    public function decrypt() 
+    {
     	$sign = $this->request->post('sign');
     	$time = $this->request->post('time');
     	$short = $this->request->post('short');
     	
     	$tmp = Des::decrypt($sign, $key = $short.$time);
+    	echo $key;
     	
     	return json(['sign'=>$tmp]);
     }

+ 0 - 2
extend/.gitignore

@@ -1,2 +0,0 @@
-*
-!.gitignore

+ 67 - 0
extend/crypt/Des.php

@@ -0,0 +1,67 @@
+<?php
+
+namespace crypt;
+
+class Des {
+	
+	/**
+	 * @uses des 加密 cbc模式
+	 * @param string $str
+	 * @param string $key
+	 * @return string
+	 */
+	public static function encrypt($str, $key)
+	{
+		$str = self::pkcsPadding($str, 8);
+		$v = pack('H*', "1234567890abcdef");
+		$key = str_pad($key, 8, '0'); //3DES加密将8改为24
+		$sign = openssl_encrypt($str, 'DES-CBC', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $v);
+		$sign = base64_encode($sign);
+		return $sign;
+	}
+	
+	
+	/**
+	 * @uses des解密 cbc模式 
+	 * @param string $encrypted
+	 * @param string $key
+	 * @return string
+	 */
+	public static function decrypt($encrypted, $key)
+	{
+		$encrypted = base64_decode($encrypted);
+		$v = pack('H*', "1234567890abcdef");
+		$key = str_pad($key, 8, '0'); //3DES加密将8改为24
+		$sign = @openssl_decrypt($encrypted, 'DES-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $v);
+		$sign = self::unPkcsPadding($sign);
+		$sign = rtrim($sign);
+		return $sign;
+	}
+	
+	/**
+	 * @uses 填充
+	 * @param string $str
+	 * @param int $blocksize
+	 * @return string
+	 */
+	private static function pkcsPadding($str, $blocksize)
+	{
+		$pad = $blocksize - (strlen($str) % $blocksize);
+		return $str . str_repeat(chr($pad), $pad);
+	}
+	
+	/**
+	 * @uses 去填充
+	 * @param string $str
+	 * @return string
+	 */
+	private static function unPkcsPadding($str)
+	{
+		$pad = ord($str{strlen($str) - 1});
+		if ($pad > strlen($str)) {
+			return false;
+		}
+		return substr($str, 0, -1 * $pad);
+	}
+	
+}

+ 132 - 0
extend/crypt/Rsa.php

@@ -0,0 +1,132 @@
+<?php
+
+namespace crypt;
+
+class Rsa {
+	
+	/**
+	 * @uses 获取私钥
+	 * @return bool|resource
+	 */
+	private static function getPrivateKey()
+	{
+		$abs_path = dirname(__FILE__) . '/file/rsa_private_key.pem';
+		$content = file_get_contents($abs_path);
+		if (empty($content)) return false;
+		
+		$res = "-----BEGIN RSA PRIVATE KEY-----\n" .
+				wordwrap($content, 64, "\n", true) .
+				"\n-----END RSA PRIVATE KEY-----";
+		
+		return openssl_pkey_get_private($res);
+	}
+	
+	/**
+	 * @uses 获取公钥
+	 * @return bool|resource
+	 */
+	private static function getPublicKey()
+	{
+		$abs_path = dirname(__FILE__) . '/file/rsa_public_key.pem';
+		$content = file_get_contents($abs_path);
+		if (empty($content)) return false;
+		
+		$res = "-----BEGIN PUBLIC KEY-----\n" .
+				wordwrap($content, 64, "\n", true) .
+				"\n-----END PUBLIC KEY-----";
+		
+		return openssl_pkey_get_public($res);
+	}
+	
+	private static function getKenLen() {
+		$pub_id = openssl_get_publickey(self::getPublicKey());
+		return openssl_pkey_get_details($pub_id)['bits'];
+	}
+	
+	public static function getPK(){
+		return self::getPublicKey();
+	}
+	
+	/**
+	 * @uses 私钥加密
+	 * @param string $data
+	 * @return null|string
+	 */
+	public static function privEncrypt($data = '')
+	{
+		if (!is_string($data)) return null;
+		
+		$crypto = '';
+		$encrypted  = '';
+		$len = self::getKenLen() / 8 - 11;
+		
+		foreach (str_split($data, $len) as $chunk) {
+			openssl_private_encrypt($chunk, $encrypted, self::getPrivateKey());
+			$crypto .= $encrypted;
+		}
+		
+		return base64_encode($crypto);
+	}
+	
+	/**
+	 * @uses 公钥加密
+	 * @param string $data
+	 * @return null|string
+	 */
+	public static function publicEncrypt($data = '')
+	{
+		if (!is_string($data)) return null;
+		
+		$crypto = '';
+		$encrypted  = '';
+		$len = self::getKenLen() / 8 - 11;
+		
+		foreach (str_split($data, $len) as $chunk) {
+			openssl_public_encrypt($chunk, $encrypted, self::getPublicKey());
+			$crypto .= $encrypted;
+		}
+		
+		return base64_encode($crypto);
+	}
+	
+	/**
+	 * @uses 私钥解密
+	 * @param string $encrypted
+	 * @return null
+	 */
+	public static function privDecrypt($encrypted = '')
+	{
+		if (!is_string($encrypted)) return null;
+		
+		$crypto = '';
+		$len = self::getKenLen() / 8;
+		
+		foreach (str_split(base64_decode($encrypted), $len) as $chunk) {
+			$decryptData = '';
+			openssl_private_decrypt($chunk, $decryptData, self::getPrivateKey());  
+			$crypto .= $decryptData;
+		}
+		return $crypto;
+	}
+	
+	/**
+	 * @uses 公钥解密
+	 * @param string $encrypted
+	 * @return null
+	 */
+	public static function publicDecrypt($encrypted = '')
+	{
+		if (!is_string($encrypted)) return null;
+		
+		$crypto = '';
+		$decrypted = '';
+		$len = self::getKenLen() / 8;
+		
+		foreach (str_split(base64_decode($encrypted), $len) as $chunk) {
+			openssl_public_decrypt($chunk, $decrypted, self::getPublicKey());
+			$crypto .= $decrypted;
+		}
+		
+		return $crypto;
+	}
+}

+ 1 - 0
extend/crypt/file/rsa_private_key.pem

@@ -0,0 +1 @@
+MIIEpAIBAAKCAQEAnDM+xOigV75IKiIXLqfgCK6G1C14JAexa8l+eQ+VV/3AFgAyBgcLtrUPa6JLuos56imqv1aEWCdR2RwObyUaZ2qtyNhHpA5ggOBJ7M2BWutWchKlrVZ8Rv7kcAvPISXSdjeRPmxbg/X18YY4QRk7+s4/2q1Hfxkw1wQMop6ojbiIe6Eap9buC6xEmfMEqC7yaWXQ5CEeNLASjgV0sYMQSknFCoswnQPlG+i3y+CqmZk8arJu3sJHfNjUKMV6GdA/LHnH7dyH0BrOY5wQcLCEOu2SZ9517Aq4CD1KNm9M+Y5dH4RPurcMvWGWcN5FKb3SQX0viK5W7zP6YjDIuSVzsQIDAQABAoIBAFDBodM2HigfJbo609d4TbjPWr/6HiIqpA0BKNU4PFM4ywXU5gf9vo2gwK86QoLYloG9Nx0jgtr8wTFJcyD9gtAy9FRhlXB5SmV3EGFQwm8aOyBRCb07eJdQExTm1hjiMBSUmBA4/3uTP6u2ZAEsJbl+xr6tVcidYoXX/xxYgPZ7wbU7HHm6jixjjfN7XeimmOle3JOUs+IPEqQ1FEugn6n2mFtuXEy1omRMdyP6U3T+TVg4TuMFLZFCZsBFcCzbWi9yx52LyopqZgNwBsEaN0eXIjtsYuFW5nP3zEMq9w+/06v999eS04TOFKIaI0kcOV8b7Q/Suihn3EN9tTRu58ECgYEAyX5PhR1dvfMVuaBohrALdsjqLGiJ47OlMIogXRnzzhTpvw0Oqz0iwn6lD4jZpahLH1B/6ujmXVpN2ba/uB4yEqp3UodgPgeLjPZWSWnW1SFhbu9CkrK+fmjobkoPypOF1JjPnaLMjAFM7XfCyAkvo7GUXuj08fak9YOYvrZGpmkCgYEAxnRRWiYnBBYRDSGuNBuCXAm3aezMhVmLDC4KhJLQvym68Vss9uydVQoleka37vvx6ZXpiXVPj5KNVeQZp8Nsnhre9nl6CymhySdLRr4RvBTaNcBCgTmCzpQMopnGjk7cmlu7vwJTPiqv+SwhfB7UM6jXDQYWJRD2ZvdgONatigkCgYAYVnVscrub8fyxyzpU6na4BlSiwI3HPy+4yTZXiIb2YXhKZ11aOaw1Ke7uDW2coNNSGPsaeL86j2nP3k8SAjOyJXz8LvXlCCxG/oo1m98jJ0EJkUTNS2HPCwToLXHy2hbUMxEAzWU/k/iixlB0sQdcElsFi8XqZAxQy3BruMCX4QKBgQDET3nOAGGl9CIn6EJHv1KjsuThfmIOIzad9MlovUaLYz9O009Wb1dvMNtD6sK2QDncQ/RBim8KagEvjrUmM/W1LIWUMTRd6G/m6NzY/NnUQJhehXIEHJzdtqwNCKrWSQKGGupMl4M6wsVSaaox+tkUxRb+BiBPyEjGMDzZ3NrL6QKBgQC+7p+DsmnMYqUrhjufwbxSCsA+fs6TE/cjthLsy40sNDRH40cDmZgh7N3Kiwm4dywz6RHjuUyCdqBSKmFG9PvjeRLLtyfDx2g4kEIBm+3ovF0ULyHTX5dyKOJ3l9rRTx6xqMyF538IhvYt9gJBoKH6eMb4rioMOJ9kdCs1Sxxv7Q==

+ 1 - 0
extend/crypt/file/rsa_public_key.pem

@@ -0,0 +1 @@
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnDM+xOigV75IKiIXLqfgCK6G1C14JAexa8l+eQ+VV/3AFgAyBgcLtrUPa6JLuos56imqv1aEWCdR2RwObyUaZ2qtyNhHpA5ggOBJ7M2BWutWchKlrVZ8Rv7kcAvPISXSdjeRPmxbg/X18YY4QRk7+s4/2q1Hfxkw1wQMop6ojbiIe6Eap9buC6xEmfMEqC7yaWXQ5CEeNLASjgV0sYMQSknFCoswnQPlG+i3y+CqmZk8arJu3sJHfNjUKMV6GdA/LHnH7dyH0BrOY5wQcLCEOu2SZ9517Aq4CD1KNm9M+Y5dH4RPurcMvWGWcN5FKb3SQX0viK5W7zP6YjDIuSVzsQIDAQAB