HTML5中使用圖片傳遞密文

来源:http://www.cnblogs.com/hsxixi/archive/2016/12/24/6216934.html
-Advertisement-
Play Games

上面的兩張圖片中,你能看出有什麼不同嗎? 右圖使用 html5 canvas api 中的 和 函數嵌入了一段文字。 道理很簡單, 函數返回一個 對象,該對象包含三個屬性: 是一個位元組數組,每 4 位元組表示圖片中一個像素,按照“ 紅、綠、藍、透明度”的順序依次排列, 表示圖片寬度, 圖片高度。 只要 ...


上面的兩張圖片中,你能看出有什麼不同嗎?

右圖使用 html5 canvas api 中的 getImageDataputImageData 函數嵌入了一段文字。

道理很簡單,getImageData 函數返回一個 ImageData 對象,該對象包含三個屬性: data 是一個位元組數組,每 4 位元組表示圖片中一個像素,按照“ 紅、綠、藍、透明度”的順序依次排列,width 表示圖片寬度,height 圖片高度。
只要將我們的密文轉成 0 - 255 之間的數值,存入數組,然後再顯示成圖片。讀取時反向讀取並轉碼就可以了。


<!DOCTYPE html>
<html >
    <head>
        <meta charset="utf-8">
        <title>Hello...</title>
        <style type="text/css">
        </style>
    </head>
    <body>
        <canvas id="canvas1"></canvas>
        <script> 
            var pic;
            var canvas;
            var ctx;
            var imgData;
            var data;
            
            window.onload = function(){
                canvas = document.getElementById("canvas1");
                ctx = canvas.getContext("2d");
                
                canvas.width = 400;
                canvas.height = 200;
                
                pic = new Image();
                pic.onload = function(){
                    ctx.drawImage(pic, 0, 0, pic.width, pic.height);
                    imgData = ctx.getImageData(0, 0, pic.width, pic.height);
                    data = imgData.data;

                    // put the secret
                    //var s = encodeURI("we dream and we build.we never give up.we never quit.");
                    var s = encodeURI("女神,約嗎?");
                    for(var j=0; j<s.length; j++){
                        data[j*400+3] = 255 - s.charCodeAt(j);
                    }
                    ctx.putImageData(imgData, 130, 0);
                    
                    //get the secret 
                    var dImgData = ctx.getImageData(130, 0, pic.width, pic.height);
                    var dData = dImgData.data;
                    var ds = "";
                    for(var k=3; k<dData.length; k+=400){
                        var t = String.fromCharCode(255 - dData[k]);
                        ds += t;
                    }
                    
                    console.log(decodeURI(ds));
                }
                pic.src = "./img/xixi.jpg";
                
            };
        </script>

    </body>
</html>

註: 示例代碼中的密文僅僅是為了測試中文,順路為男神讀者們服務的。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ▓▓▓▓▓▓ 大致介紹 下午看到了一個送聖誕禮物的小動畫,正好要快到聖誕節了,就動手模仿並改進了一些小問題 原地址:花式輪播 聖誕禮物傳送 思路:動畫中一共有五個禮物,他們平均分佈在屏幕中,設置最外邊的兩個禮物旋轉一定的角度並隱藏,動畫開始,每個禮物向右移動一定的位置,然後再把第五個禮物添加到第一個 ...
  • Httpster 這個網站聚合了世界各地最新最潮的網頁設計案例,展示了創意的設計,精心的策劃,優秀的排版。這些作品都按月份和類別進行了很好劃分,你可以方便的找到自己感興趣的網站案例。 ...
  • 剛剛出來實習,之前實習的公司有一個分頁插件,和後端的數據字典約定好了的,基本上是看不到內部是怎麼實現的,新公司是做WPF的,好像對於ASP.NET的東西不多,導師扔了一個小系統給我和另一個同事,指了兩種框架的方案就讓我們自己做了。。。 剛開始在網上找了一下,覺得bootstrap-paginator ...
  • 使用jsonp實現跨域獲取數據。 js部分 在頁面中測試 結果可以返回結果,頁面顯示為,表示獲取成功! ...
  • <!doctype html> <html> <head> <title>CSS3logo</title> <style type="text/css"> html, body, div, img { margin: 0; padding: 0; } #box { position: absolut ...
  • web工程中如何將大量數據從伺服器端傳送到瀏覽器一直是很重要的一個問題。 其中一個解決方法是在伺服器端將將數據封裝成json格式,然後傳給前臺。廢話不多說,下麵講乾貨。 1.要用json必須下載一個庫和必須的依賴項。 2.導入到eclipse/myeclopseweb工程中web-inf/lib中。 ...
  • 1、元字元 [擁有特殊含義的元字元] \d -> 匹配一個0-9的數字,相當於[0-9],和它相反的是\D ->匹配一個除了0-9的任意字元 \w -> 匹配一個0-9、a-z、A-Z、_的數字或字元,相當於[0-9a-zA-Z_] \s -> 匹配一個空白字元(空格、製表符...) \b -> 匹 ...
  • <!doctype html><html><head><meta charset="utf-8"><title>無標題文檔</title><style>body{ background:#000;}.upshop-view{ width:320px; height:499px; background ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...