图片隐写,盲水印,加密logo

 

1.定义

隐写术算是一种加密技术,权威的 wiki 说法是“ 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。”

example:

钱图(钱上面的水印)

个人理解类似加水印logo的做法,加密logo就是盲水印(加密水印)~~~ 上图:

2.用途

上面 的水印就叫做盲水印,隐藏式的水印是以数字数据的方式加入音频、图片或影片中,但在一般的状况下无法被看见。隐藏式水印的重要应用之一是保护版权,期望能借此避免或阻止数字媒体未经授权的复制和拷贝。

1.不同人加相同水印

声明版权

应用案例

  • 某些画师、摄影师、设计师会在其作品中加入水印。

 

13年左右有位自称是“超写实主义”的画家,声称自己纯手工画的画写实程度可以 超过摄影机,并开办培训班敛财。 后被一位加了盲水印的摄影师戳穿,原来其“画作”都是直接将照片用ps处理成手绘质感的图。

  • 淘宝防盗图功能

 

淘宝卖家图会被淘宝自动打上水印,如果有别的卖家存图作为自己的图上传会被检测出。

2.不同人加不同水印

将某份保密数字资料发送给不同人时,可加上不同标识,如果资料被复制、传播可根据解码出的唯一标识来追究责任人。

应用案例

  • 电影刚刚公映时,每个影院,影厅的 电影底片里都会加入不同的不可见水印, 如果电影流出,就可追究相关影院责任。

  • 国内大厂的内部论坛、平台会在HTML页面中加入足够数量 及不被发现的唯一标识。当有内部敏感信息通过截图等方式流出,也可追踪到个人。

example:

2018年7月5日,因涉嫌窃取商业秘密,国家“千人计划”专家、通用电气主任工程师(Principal Engineer at GE Power)***被FBI逮捕。值得注意的是***的“隐写术”:通过对电脑上的数据文件进行加密,然后将机密文件隐藏在一张“日落”的数码照片的代码中,他巧妙避开了公司限制。

类似图种

3.原理图

4.盲水印特性

隐蔽性

由于不希望被察觉、不希望干扰用户体验、不希望被模仿等等原因,我们的水印不可见,也就是隐匿性。

强健性

强健性通常也被称作鲁棒性,简单地说就是耐操性。

需要说明的一点是,鲁棒性和隐蔽性通常不可兼得。

不易移除性

不易移除性跟鲁棒性有些相似, 不同的是:

鲁棒性更加强调的是数字资源在传播过程中不要被不自觉地干扰和破坏。

不易移除性是在别有用心者察觉了盲水印的存在后,不被他们自觉地移除或者破坏。

明确性

没什么可说的,就是盲水印需要表示出明确的信息。

5.前端角度分析

聚焦到载体为图片的隐写术,一起来从前端角度分析其技术原理。

我们知道图片的像素信息里存储着 RGB 的色值,R、G、B 分别为该像素的红、绿、蓝通道,每个通道的分量值范围在 0~255,16 进制则是 00~FF。在 CSS 中经常使用其 16 进制形式,比如指定博客头部背景色为 #A9D5F4。其中 R(红色)的 16 进制值为 A9,换算成十进制为 169。这时候,对 R 分量的值+1,即为 170,整个像素 RGB 值为 #AAD5F4,别说你看不出差别,就连火眼金金的“ 像素眼” 设计师都察觉不出来呢。于此同时,修改 G、B 的分量值,也是我们无法察觉的。因此可以得出重要结论:RGB 分量值的小量变动,是肉眼无法分辨的,不影响对图片的识别

有了这个结论,那就给我们了利用空间,常用手段的就是对二进制最低位进行操作,下面就用 canvas 来演示一下。

6.代码分析

1)解密

下面是一张靓女照片,里面的 G 通道分量被我加入了些文本信息,下面通过canvas来解开其中的信息 。

1.首先在页面加入一个 canvas 标签,并获取到其上下文。

 
<canvas id="canvasShow" width="601" height="338"></canvas>
let ctx = document.querySelector('#canvasShow').getContext('2d')

2.接着将图片先绘制在画布上,然后获取其像素数据。

 
let img = new Image()let originalDataimg.onload = function () {ctx.drawImage(img, 0, 0)// 获取指定区域的canvas像素信息originalData = ctx.getImageData(0,0,ctx.canvas.width,ctx.canvas.height)console.log('加料图信息', originalData)processData(originalData)}img.src = require('../assets/下载.png')

打印出数据,会看到有一个非常大的数组。

这个一维数组存储了所有的像素信息,一共有 601 * 338* 4 = 812552个值。其中 4 个值一组,为什么呢?在浏览器中解析图片,除了 RGB 值外,每组第 4 个值为透明度值,即像素信息实际为大家熟知的 rgba 值。

这里的解密规则是对 G 通道进行处理,G 的分量最低位为 1 则该像素设为绿色,G 的分量最低位为 0 则该像素设为黑色,直接看代码实现,完成后我们再绘制到 canvas,即可看到结果。

 
let processData = function (originalData) { let data = originalData.data for (let i = 0; i < data.length; i++) { if (i % 4 == 1) { if (data[i] % 2 === 0) { data[i] = 0 } else { data[i] = 255 } } else if (i % 4 === 3) { // alpha通道不做处理 continue } else { // 关闭其他分量,不关闭也不影响答案,甚至更美观 // data[i] = 0 } } // 将结果绘制到画布 ctx.putImageData(originalData, 0, 0) }

在 img onload 事件中调用 processData 方法,就可以看到结果啦。

得到的结果可能是这个样子的。

2)加密(在图片中隐藏信息)

上面先说了解密过程,再来反向说说加密过程。

1.首先在页面加入2个 canvas 标签,并获取到其上下文,这两个canvas分别对应文字和原图。

 
<canvas id="canvasText" width="601" height="338"></canvas>
<canvas id="canvas" width="601" height="338"></canvas>let ctx = document.querySelector('#canvas').getContext('2d')
let ctxText = document.querySelector('#canvasText').getContext('2d')

2.既然要在图片中加入文字信息,那么首先要获取文字的像素信息,这里我先用 canvas 在画布上打印文字,获取像素信息。

 
let textData ctxText.font = '30px Microsoft Yahei'
ctxText.fillText('hello world!', 300, 260)
textData = ctxText.getImageData( 0, 0, ctxText.canvas.width, ctxText.canvas.height ).data console.log('加密信息data', textData)

3.先保存文字的像素信息,接着加载图片获取其像素信息,然后对两组像素进行处理,过程中我抽离了一个公共方法。

 
let mergeData = function (newData, color) {let oData = originalData.dataconsole.log('oData', oData)// bit[r,g,b,a]位置, offset+bit =a位置let bit, offsetswitch (color) {case 'R':bit = 0offset = 3breakcase 'G':bit = 1offset = 2breakcase 'B':bit = 2offset = 1break}for (let i = 0; i < oData.length; i++) {if (i % 4 == bit) {// 只处理目标通道if (newData[i + offset] === 0 && oData[i] % 2 === 1) {// 没有水印信息的像素,将其对应通道的值设置为偶数(奇变偶不变)if (oData[i] === 255) {oData[i]--} else {oData[i]++}} else if (newData[i + offset] !== 0 && oData[i] % 2 === 0) {// 有水印信息的像素,将其对应通道的值设置为奇数(偶变奇不变)if (oData[i] === 255) {oData[i]--} else {oData[i]++}}}}ctx.putImageData(originalData, 0, 0)}

这个公共方法做的是,接受要隐藏的数据以及隐藏的颜色通道,然后对原图进行操作,修改图片该通道分量的最低位,如果有文字信息,则最低位置为 1,否则为 0。我们知道,RGB 的三个通道可以分别隐藏不同信息。

4.在 img.onload 中调用 mergeData(textData, 'G'),处理好图像后,只要在浏览器中的 canvas 上右键保存图片就可以得到一张带有加密信息的图片。

 
let img = new Image()let originalDataimg.onload = function () {ctx.drawImage(img, 0, 0)// 获取指定区域的canvas像素信息originalData = ctx.getImageData(0,0,ctx.canvas.width,ctx.canvas.height)console.log(originalData)mergeData(textData, 'G')}img.src = require('../assets/20220721180808.jpg')

结尾

例子比较简单,只展示了基本的最低位隐藏文本信息,像二维码这些简单图形也可以这么处理~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33807.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工具分享:图片水印工具(WaterMarker)

给大家分享个水印工具&#xff0c;由于公司不能装第三方工具。没办法&#xff0c;只能自己做个工具来用用。该工具的效果如下&#xff1a; 程序界面 配置水印信息 预览水印效果 图片处理状态 被打上水印后的效果 源码下载 CodePlex

不知道图片添加水印软件有哪些?推荐这三款给图片加水印的软件

各位画手大大有没有遇到过这种情况&#xff0c;自己好不容易画好的稿子想发布到一些网络平台上引流&#xff0c;但是图片又很容易被盗用&#xff0c;这个时候我们需要借助一些软件给自己的画稿加上自己的水印防止被盗&#xff0c;那你知道图片添加水印软件有哪些吗&#xff1f;…

张朝阳挺了过来

2017年第四届世界互联网大会期间的张朝阳 本文写于2002年。 2002年1月10日晚&#xff0c;北京恭王府内高朋满座&#xff0c;搜狐2001十大新闻颁奖典礼正在这里进行。重新看到久违的隆重场面&#xff0c;张朝阳无法抑制住自己的兴奋&#xff0c;他说&#xff1a;“如果北京有上流…

张朝阳与二马或其他

张朝阳手推质能方程 没地方继续推导了&#xff0c;擦黑板前还要感慨一句“不忍心擦掉”。 张朝阳1993年底在美国麻省理工学院&#xff08;MIT&#xff09;获得了博士学位&#xff0c;并在MIT从事博士后研究。 毕业这么多年了&#xff0c;当初学的东西&#xff0c;还能以这种…

腾讯会议如何使用讲演者模式进行汇报(nian gao)

腾讯会议如何使用讲演者模式进行汇报&#xff08;nian gao&#xff09; 首先列出步骤&#xff0c;再一一演示&#xff1a; altf5 开启讲演者模式&#xff0c;调整讲演者模式的窗口为小窗alttab 切换回腾讯会议界面&#xff0c;屏幕共享power point窗口&#xff08;注意不是“…

python 股票量化盘后分析系统V0.47

前言&#xff1a;先放效果图 关于stock_backtrader.py这个代码文件&#xff0c;可能由于代码逻辑判断跟条件语句太多&#xff0c;当你在这个编辑代码界面时&#xff0c;CPU占用异常高&#xff0c;估计是pycharm的语法检查功能导致的&#xff0c;当然估计也有一部分是我写的代…

追击涨停板-支持A股每日涨停分析。股票量化分析工具QTYX-V2.3.8

前言 目前A股市场的股票每天是有限制最大涨幅的&#xff0c;也就是涨停的概念。比如主板个股最大涨幅是10%&#xff0c;创业板个股最大涨幅是20%等。 对于个股而言并不是随随便便就能被推到涨停板的。或是因为股票发生了重大的利好&#xff08;资产重组、政策利好、业绩暴增等&…

python股票量化交易(8)---K线图:锤头,射击之星,早晨之星

人之有志&#xff0c;如树之有根&#xff0c;立定此志&#xff0c;须念念谦虚&#xff0c;尘尘方便&#xff0c;自然感动天地&#xff0c;而造福由我。 目录 锤头倒锤头射击之星早晨之星 锤头 本篇接着上篇介绍K线形态。 首先&#xff0c;我们今天介绍的第一个K线形态是锤头&…

每日股市大盘自动复盘(基于聚宽量化投资平台)

直接上代码&#xff0c;代码里需要用到聚宽平台的jqdata&#xff0c;可在聚宽研究环境中运行。 import numpy as np import datetime import jqdata from jqdata import * import pandas as pd import matplotlib.pyplot as plt import json #字符转换 matplotlib.r…

复盘股票问题

通过leetcode上的几道经典的股票问题&#xff0c;我们由浅入深地认识到动态规划的精妙之处&#xff0c;下面我们来复盘一下股票问题的解题思路&#xff0c;看我们是如何抽丝剥茧&#xff0c;一步一步地逼近正确思路&#xff0c;迎来柳暗花明的。 首先还是老生常谈的问题&#…

基于qstock的量化复盘与自动盯盘

01 引言 qstock量化分析库和教程自发布以来已经有一段时间了。收到不少读者的反馈&#xff0c;希望在qstock上添加更多的实用功能和案例研究。在回应这些反馈的同时&#xff0c;公众号也一直在努力改进现有的功能和教程内容。我们的目标是为用户提供更全面、更实用、更易于理解…

腾讯 Angel Graph 图计算框架在智能风控中的应用

本文约6800字&#xff0c;建议阅读15分钟 本文为你分享腾讯的姜亚松老师的图计算框架Angel Graph。 [ 导读 ] 图计算在智能风控场景有着广泛的应用&#xff0c;但是图的规模和计算的复杂度往往会制约落地的使用&#xff0c;目前各家机构都开展了图计算框架的自研&#xff0c;来…

金融风控数据分析

一、信贷底层库表详解与数据集市构建 1.信贷业务底层数据核心库表穿透式详解 1&#xff09;客户信息表结构与数据&#xff08;customer_info&#xff09; 客户信息表是根据客户在前端申请信贷产品时主动填写的信息收集的&#xff0c;部分可验证字段可直接用于风控规则&#…

python金融风控评分卡模型和数据分析(加强版)

在公众号「python风控模型」里回复关键字&#xff1a;学习资料 扣扣学习群&#xff1a;1026993837 领学习资料 金融风控模型和数据分析很难&#xff1f;逻辑回归评分卡/catboost/xgboost/lightgbm/等模型用python一次全部搞定&#xff01;增加数据分析和数据可视化实战&#xf…

python金融风控评分卡模型和数据分析(加强版)-收藏

信用评分卡 信用评分是指根据银行客户的各种历史信用资料&#xff0c;利用一定的信用评分模型&#xff0c;得到不同等级的信用分数&#xff0c;根据客户的信用分数&#xff0c;授信者可以通过分析客户按时还款的可能性&#xff0c;据此决定是否给予授信以及授信的额度和利率。 …

风控建模一、初步认识风控

风险控制&#xff08;Risk Control)&#xff0c;简称风控&#xff0c;是互联网金融的核心。 一、基础知识 1.1 A/B/C卡 A卡&#xff08;Application score card&#xff09;即申请评分模型&#xff08;贷款前&#xff09;&#xff0c;用于预测申请时点&#xff08;申请信用卡…

全面了解风控指标体系

说明 风险管理主要分为四大部分&#xff1a;风险识别、风险分析、风险监控、风险应对。而在量化风险管理的今天&#xff0c;这四个风控部分全都离不开风险指标的梳理、判断、追踪。在信贷业务中&#xff0c;常见贷款流程为&#xff1a;**申请>审批>签约放款>贷后管理…

风控报表体系建设与风控指标

文章目录 风控报表体系建设贷中&#xff1a;监控贷中&#xff1a;资产质量报表贷后&#xff1a;审批监控贷后&#xff1a;拒绝原因分布贷后&#xff1a;用户特征监控贷后&#xff1a;模型监控催收业绩表催收效率表一、应收账款(含销账)(Account Receivable, AR)二、期末贷款余额…

风控模型评估方法以及大数据风控模型概念

更新一下有效性指标中的区分能力指标&#xff1a; KS(Kolmogorov-Smirnov)&#xff1a;KS用于模型风险区分能力进行评估&#xff0c;指标衡量的是好坏样本累计分部之间的差值。好坏样本累计差异越大&#xff0c;KS指标越大&#xff0c;那么模型的风险区分能力越强。 KS的计算步…

风控评分模型

一 概述 余额支付的风险识别模型分为两类&#xff1a;&#xff08;1&#xff09;盗号交易识别风险 和 &#xff08;2&#xff09;盗卡交易识别风险。其中盗卡交易识别风险和余额有关主要是由于骗子注册号码帮盗来的卡&#xff0c;然后进行充值到余额&#xff0c;通过余额支付销…