sjcl实现带查看密码的图片隐写信息示例代码
代码语言:html
所属分类:其他
代码描述:sjcl实现带查看密码的图片隐写信息示例代码,隐写术可以视为一种信息安全技术,其在wiki上的定义是一门关注信息隐藏的技巧与科学,主要目的是确保信息在传输或存储过程中不被未授权者获知。 利用特定的工具,图片中隐藏的文字信息可以被提取出来,而不会对图片的正常显示造成任何影响。这种技术可以用于隐藏或保护敏感信息,只有掌握特定工具的人才能解密出隐藏的信息。 隐写术在许多场景中都有广泛的应用,比如程序员之间可以用此法进行表白(不论男女),作为一种浪漫的方式。此外,据说大众点评曾成功运用此技术证明了某app对其图片
代码标签: sjcl 查看 密码 图片 隐写 信息 示例 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" /> <title>BFW NEW PAGE</title> <style> </style> </head> <body> <style> .container{font-size:16px;width:1000px;margin:0 auto}.container .divider{width:100%;background:#CCC;height:1px;margin:25px 0}.container .row{min-height:2em;line-height:2em;width:100%}.container .row:before,.container .row:after{display:block;overflow:hidden;visibility:hidden;width:0;height:0}.container .row:after{clear:both}.container .row{zoom:1;margin:10px 0}.container .span{float:left;display:inline;min-height:1em}.container .span:first-child{margin-left:0}.container .span:last-child{margin-right:0}.container .six{width:48%}.container input{text-align:left;border:1px solid #CCC;border-radius:5px;font-size:.98em}.container .input-text{width:95%;height:2.1em;line-height:2.1em;padding-left:5px}.container .button{border:0;border-radius:4px;outline:0;cursor:pointer;margin-bottom:10px}.container .button.small{padding:7px 10px;font-size:.95em}.container .button.large{padding:15px 25px;font-size:1.1em}.container .button.primary{color:#FFF;background:#5f90b0}.container .button.primary:hover{background:#5589ab}.container .button.success{color:#FFF;background:#4daf7c}.container .button.success:hover{background:#48a474}.container .button.danger{color:#FFF;background:#e6623c}.container .button.danger:hover{background:#e4572e}.container .alert{padding:10px;margin:0;border-radius:3px}.container .alert.primary{background:#e8eff3;border:1px #c5d7e3 solid}.container .alert.success{background:#daeee4;border:1px #b6dfca solid}.container .alert.danger{background:#fdf4f1;border:1px #f7cfc4 solid}.container .hidden,.container .hide{display:none} </style> <div class='container'> <h4 class="strong">一、生成带隐藏信息的图片</h4> <div class='divider'></div> <div class='row'> <div class='span'>1. 从电脑中选择一张用于加密信息的图片:</div> <div class='span'> <input type="file" accept="image/*" id="origin_image" onchange="importImage();" /> </div> </div> <div class='row'> <div class='span'>2. 输入你要隐藏到图片中的文字信息:</div> <div class='span six'> <input type="text" class="input-text" placeholder="隐藏文字,比如:你好,hello" id="secret_text" /> </div> </div> <div class='row'> <div class='span'>3. 输入需要解开信息的密码:</div> <div class='span six'> <input type="password" class="input-text" placeholder="信息查看密码,可以为空即为不加密" id="secret_pwd" /> </div> </div> <div> <button class='button primary small' onclick="javascript:encode()" type="button">生成带隐藏信息的图片</button> </div> <div class="alert success"> <canvas id="result_image" class="hidden"></canvas> <div id="encode_tip" class="strong green"></div> <img id='result_image_output' /> </div> <div class='divider'></div> <h4 class="strong">二、解密带隐藏信息的图片</h4> <div class='divider'></div> <div class='row'> <div class='span'>1. 从电脑中选择一张带有隐藏信息的图片:</div> <div class='span'> <input type="file" accept="image/*" id="decode_image" onchange="javascript:selectEncodeImage()" /> </div> </div> <div class='row'> <div class='span'>2. 输入需要解开信息的密码(如果没有密码可以不填):</div> <div class='span six'> <input type="password" class="input-text" placeholder="信息查看密码,可以为空即为图片解密不需要密码" id="decode_pwd" /> </div> </div> <div> <button class='button primary small' onclick="javascript:decode()" type="button">解密出隐藏的信息</button> </div> <div class="alert success"> <canvas id="decode_result_image" class="hidden"></canvas> <div class="strong" id="messageDecoded"></div> </div> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/sjcl.js"></script> <script type='text/javascript'> var maxMessageSize = 1000; function $_(id) { return document.getElementById(id) } function importImage() { var reader = new FileReader(); reader.onload = function(event) { $_("secret_text").value = ""; $_("secret_pwd").value = ""; $_("result_image_output").src = ""; $_("encode_tip").innerHTML = ""; var img = new Image(); img.onload = function() { var ctx = $_("result_image").getContext("2d"); ctx.canvas.width = img.width; ctx.canvas.height = img.height; ctx.drawImage(img, 0, 0) }; img.src = event.target.result }; reader.readAsDataURL($_("origin_image").files[0]) } function encode() { var message = $_("secret_text").value; var password = $_("secret_pwd").value; var output = $_("result_image_output"); var result_image = $_("result_image"); var ctx = result_image.getContext("2d"); if (password.length > 0) { message = sjcl.encrypt(password, message) } else { message = JSON.stringify({ text: message }) } var pixelCount = ctx.canvas.width * ctx.canvas.height; if ((message.length + 1) * 16 > pixelCount * 4 * 0.75) { alert("需要隐藏的文本信息相对于图片来说太长了。可以减少文字信息,或者加大图片!"); return } if (message.length > maxMessageSize) { alert("需要隐藏的信息太长,最大为:" + maxMessageSize + "."); return } var imgData = ctx.getImageData(0, 0, ct.........完整代码请登录后点击上方下载按钮下载查看
网友评论0