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

資訊專欄INFORMATION COLUMN

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

yearsj / 1908人閱讀

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

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

        $tempArr = [];
        // 自定義加密規(guī)則
        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];    // 圖片原始字節(jié)
            $byte = $byte + $value; // 經(jīng)過加密規(guī)則之后的字節(jié)
            // 打包成二進(jìn)制字符串
            $tempArr[] = pack("C*", $byte);
        }

        $img = implode("", $tempArr);    // 將解包之后的一維數(shù)組裝換成字符串
        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    需要添加的信息數(shù)組
     * @param [array] $separate    分隔數(shù)組(類似于做一個(gè)加密分隔 key)
     * @return void
     */
    public function encmsg($filePath, $cardmsg, $separate)
    {
        // 文檔中建議:為移植性考慮,強(qiáng)烈建議在用 fopen() 打開文件時(shí)總是使用 "b" 標(biāo)記。
        $fileId = fopen($filePath, "rb+");
        // 取出文件大小的字節(jié)數(shù) (29124)
        $fileSize = fileSize($filePath);
        // 讀取文件,返回所讀取的字符串 (讀出來的為二進(jìn)制序列)
        $img = fread($fileId, $fileSize);
        // 使用“無符號(hào)字符”,從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解包
        // (pack、unpack用法)https://segmentfault.com/a/1190000008305573
        $imgUnpack = unpack("C*", $img); // $fileSize 長度的一維數(shù)組 [ 1=>255, 2=>216, 3=>255, ……, 29124=>217 ]
        // 關(guān)閉一個(gè)已打開的文件指針        
        fclose($fileId);

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

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

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


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

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

        $imgUnpackStr = join(",",$imgUnpack); // 將一維數(shù)組轉(zhuǎn)換為字符串
        $separateStr = implode(",", $separate); // 將一維數(shù)組轉(zhuǎn)換為字符串
        $imgAndCardmsgArr = explode($separateStr, $imgUnpackStr); // 以自定義分隔符分隔出圖片字節(jié)和身份信息字節(jié)
        
        $cardmsgArr = explode(",", $imgAndCardmsgArr[1]); // 取出身份信息字節(jié)
        unset($cardmsgArr[0]); // 去除身份信息字節(jié)首位空白 (字符串轉(zhuǎn)數(shù)組時(shí)所留)
        $cardmsg = "";
        foreach ($cardmsgArr as $k => $v) {
            $cardmsg .= pack("C*", $v);    // 打包成二進(jìn)制文件字符串
        }
 
        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字節(jié)
$cardmsg = ["name" => "張三", "gender" => "男", "idcard" => 12345678910]; // 53字節(jié)





文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/31762.html

相關(guān)文章

  • 區(qū)塊鏈學(xué)習(xí)之密碼學(xué)安全技術(shù)(五)

    摘要:非對稱加密算法的安全性往往需要基于數(shù)學(xué)問題來保障,目前主要有基于大數(shù)質(zhì)因子分解離散對數(shù)橢圓曲線等經(jīng)典數(shù)學(xué)難題進(jìn)行保護(hù)。消息認(rèn)證碼基于對稱加密,可以用于對消息完整性進(jìn)行保護(hù)。 Hash 算法與數(shù)字摘要 Hash (哈希或散列)算法它能將任意長度的二進(jìn)制明文串映射為較短的(通常是固定長度的)二進(jìn)制串(Hash值),并且不同的明文很難映射為相同的Hash值。 Hash 定義 Hash (哈希...

    aboutU 評(píng)論0 收藏0
  • 解密算法介紹

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

    ThinkSNS 評(píng)論0 收藏0
  • 安全開發(fā)筆記

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

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

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

    ky0ncheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<