国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php實現對圖片對稱加解密(適用身份證加密等場景)

yearsj / 1916人閱讀

摘要:圖片加解密可以將人員身份證圖片通過修改字節加密,并且可將身份證信息也寫入圖片中。

圖片加解密
可以將人員身份證圖片通過修改字節加密,并且可將身份證信息也寫入圖片中。 可以直接將以下代碼復制到一個php文件中進行測試。詳情請看代碼。
255, 2=>216, 3=>255, ……, 29124=>217 ]
        
        // 關閉一個已打開的文件指針        
        fclose($fileId);

        $tempArr = [];
        // 自定義加密規則
        for ($i = 1; $i <= $fileSize; $i++) { 
            $value = 0;
            if ($i % 3 == 0) {
                $value = 2;
            } elseif ($i % 5 == 0) {
                $value = 4;
            } elseif ($i % 7 == 0) {
                $value = 6;
            }
            $byte = $imgUnpack[$i];    // 圖片原始字節
            $byte = $byte + $value; // 經過加密規則之后的字節
            // 打包成二進制字符串
            $tempArr[] = pack("C*", $byte);
        }

        $img = implode("", $tempArr);    // 將解包之后的一維數組裝換成字符串
        file_put_contents($filePath, $img); // 重寫圖片
    }


    /**
     * 圖片對稱解密
     *
     * @param [string] $filePath    圖片路徑
     * @return void
     */
    public function dec($filePath)
    {
        $fileId = fopen($filePath, "rb+");
        $fileSize = filesize($filePath);
        $img = fread($fileId, $fileSize);
        $imgUnpack = unpack("C*", $img);
        fclose($fileId);

        $tempArr = [];
        // 開始解密
        for ($i = 1; $i <= $fileSize; $i++) { 
            $value = 0;
            if ($i % 3 == 0) {
                $value = 2;
            } elseif ($i % 5 == 0) {
                $value = 4;
            } elseif ($i % 7 == 0) {
                $value = 6;
            }
            $byte = $imgUnpack[$i];
            $byte = $byte - $value;
            $tempArr[] = pack("C*", $byte);
        }
        $img = implode("", $tempArr);
        file_put_contents($filePath, $img);
    }


    /**
     * 圖片追加信息
     *
     * @param [string] $filePath    圖片路徑
     * @param [array] $cardmsg    需要添加的信息數組
     * @param [array] $separate    分隔數組(類似于做一個加密分隔 key)
     * @return void
     */
    public function encmsg($filePath, $cardmsg, $separate)
    {
        // 文檔中建議:為移植性考慮,強烈建議在用 fopen() 打開文件時總是使用 "b" 標記。
        $fileId = fopen($filePath, "rb+");
        // 取出文件大小的字節數 (29124)
        $fileSize = fileSize($filePath);
        // 讀取文件,返回所讀取的字符串 (讀出來的為二進制序列)
        $img = fread($fileId, $fileSize);
        // 使用“無符號字符”,從二進制字符串對數據進行解包
        // (pack、unpack用法)https://segmentfault.com/a/1190000008305573
        $imgUnpack = unpack("C*", $img); // $fileSize 長度的一維數組 [ 1=>255, 2=>216, 3=>255, ……, 29124=>217 ]
        // 關閉一個已打開的文件指針        
        fclose($fileId);

        // 處理身份信息
        $cardmsgJson = json_encode($cardmsg, JSON_UNESCAPED_UNICODE);
        $cardmsgUnpack = unpack("C*", $cardmsgJson);

        // 合并圖片字節、自定義分隔數組(類似手動加 key 值)、身份信息字節
        $mergeArr = array_merge($imgUnpack, $separate, $cardmsgUnpack);

        $pack = [];
        foreach ($mergeArr as $k => $v) {
            $pack[] = pack("C*", $v);
        }
        $packStr = join("", $pack);
        file_put_contents($filePath, $packStr); // 重寫圖片
    }


    /**
     * 獲取追加進圖片的信息
     *
     * @param [string] $filePath    圖片路徑
     * @param [array] $separate    定義的分隔數組(分隔 key)
     * @return [string] 追加進的圖片信息
     */
    public function decmsg ($filePath, $separate) 
    {
        // 文檔中建議:為移植性考慮,強烈建議在用 fopen() 打開文件時總是使用 "b" 標記。
        $fileId = fopen($filePath, "rb+");
        // 取出文件大小的字節數 (29192)
        $fileSize = fileSize($filePath);
        // 讀取文件,返回所讀取的字符串 (讀出來的為二進制序列)
        $img = fread($fileId, $fileSize);

        // 使用“無符號字符”,從二進制字符串對數據進行解包
        $imgUnpack = unpack("C*", $img); // $fileSize 長度的一維數組 [ 1=>255, 2=>216, 3=>255, ……, 29192=>217 ]
        // 關閉一個已打開的文件指針        
        fclose($fileId);

        $imgUnpackStr = join(",",$imgUnpack); // 將一維數組轉換為字符串
        $separateStr = implode(",", $separate); // 將一維數組轉換為字符串
        $imgAndCardmsgArr = explode($separateStr, $imgUnpackStr); // 以自定義分隔符分隔出圖片字節和身份信息字節
        
        $cardmsgArr = explode(",", $imgAndCardmsgArr[1]); // 取出身份信息字節
        unset($cardmsgArr[0]); // 去除身份信息字節首位空白 (字符串轉數組時所留)
        $cardmsg = "";
        foreach ($cardmsgArr as $k => $v) {
            $cardmsg .= pack("C*", $v);    // 打包成二進制文件字符串
        }
 
        return json_decode($cardmsg, true);
    }



}


$encrypt = new Encrypt();

$path = "./001.jpg";

$separate = [255, 0, 255, 0, 255, 0, 255, 206, 210, 202, 199, 183, 214, 184, 244]; // 15字節
$cardmsg = ["name" => "張三", "gender" => "男", "idcard" => 12345678910]; // 53字節





文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31762.html

相關文章

  • 區塊鏈學習之密碼學安全技術(五)

    摘要:非對稱加密算法的安全性往往需要基于數學問題來保障,目前主要有基于大數質因子分解離散對數橢圓曲線等經典數學難題進行保護。消息認證碼基于對稱加密,可以用于對消息完整性進行保護。 Hash 算法與數字摘要 Hash (哈?;蛏⒘校┧惴ㄋ軐⑷我忾L度的二進制明文串映射為較短的(通常是固定長度的)二進制串(Hash值),并且不同的明文很難映射為相同的Hash值。 Hash 定義 Hash (哈希...

    aboutU 評論0 收藏0
  • 解密算法介紹

    摘要:加密解密算法介紹算法目前常見有加密算法,散列算法,編碼算法,使用位關鍵字作為流加密算法加密技術通常分為兩大類對稱式和非對稱式。對稱性加密算法有用途對稱加密算法用來對敏感數據等信息進行加密數據加密標準,速度較快,適用于加密大量數據的場合。 加密解密算法介紹 算法目前常見有: 加密算法,散列算法,Base64(編碼算法),https(SSL使用40位關鍵字作為RC4流加密算法) 加密技術通...

    ThinkSNS 評論0 收藏0
  • 安全開發筆記

    摘要:登錄注冊安全風險登錄注冊的風險點主要有四個暴力破解撞庫遍歷注冊用戶批量注冊。引入了驗證碼機制同樣引入了額外的安全風險,比如短信驗證碼的短信炸彈風險圖形驗證碼的可繞過可識別等。 概述 很多技術研發不了解安全,也不重視安全,只有在自己的服務器被黑掉、被掛馬、被脫褲才想起關注安全,但是這個時候,技術架構已經成型、代碼已經在線上穩定運行,再亡羊補牢,改代碼、改策略,往往成本巨大、確收效很低。所...

    Cruise_Chan 評論0 收藏0
  • Swoole 源碼分析——Server模塊之OpenSSL (上)

    摘要:另一方比如小明得到公鑰之后,雙方就可以通信。然而,中間人還是可能截獲公鑰,然后自己弄一對秘鑰,然后告訴小明說是小紅的公鑰。這樣,小亮在簽署小紅的身份證的時候,可以在小紅身份證后面附上自己的身份證。一般來說,自簽名的根身份證用于公司內部使用。 前言 自從 Lets Encrypt 上線之后,HTTPS 網站數量占比越來越高,相信不久的未來就可以實現全網 HTTPS,大部分主流瀏覽器也對 ...

    ky0ncheng 評論0 收藏0

發表評論

0條評論

yearsj

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<