成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

yearsj / 1921人閱讀

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

圖片加解密
可以將人員身份證圖片通過(guò)修改字節(jié)加密,并且可將身份證信息也寫(xiě)入圖片中。 可以直接將以下代碼復(fù)制到一個(gè)php文件中進(jìn)行測(cè)試。詳情請(qǐng)看代碼。
255, 2=>216, 3=>255, ……, 29124=>217 ]
        
        // 關(guān)閉一個(gè)已打開(kāi)的文件指針        
        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ò)加密規(guī)則之后的字節(jié)
            // 打包成二進(jìn)制字符串
            $tempArr[] = pack("C*", $byte);
        }

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


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

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

        // 合并圖片字節(jié)、自定義分隔數(shù)組(類(lèi)似手動(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); // 重寫(xiě)圖片
    }


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

        // 使用“無(wú)符號(hào)字符”,從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包
        $imgUnpack = unpack("C*", $img); // $fileSize 長(zhǎng)度的一維數(shù)組 [ 1=>255, 2=>216, 3=>255, ……, 29192=>217 ]
        // 關(guān)閉一個(gè)已打開(kāi)的文件指針        
        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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31762.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

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