设为首页
优惠IDC
收藏本站
六狼博客
六狼论坛
开启辅助访问
切换到窄版
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
只需一步,快速开始
快捷导航
门户
首页
BBS
云计算
大数据
手机
移动开发android,ios,windows phone,windows mobile
编程
编程技术java,php,python,delphi,ruby,c,c++
前端
WEB前端htmlcss,javascript,jquery,html5
数据库
数据库开发Access,mysql,oracle,sql server,MongoDB
系统
操作系统windows,linux,unix,os,RedHat,tomcat
架构
项目管理
软件设计,架构设计,面向对象,设计模式,项目管理
企业
服务
运维实战
神马
搜索
搜索
热搜:
php
java
python
ruby
hadoop
sphinx
solr
ios
android
windows
centos
本版
帖子
用户
六狼论坛
»
首页
›
编程技术
›
MicroSoft
›
.NET新手区
›
视觉密码(VisualCrypto)
返回列表
查看:
162
|
回复:
0
视觉密码(VisualCrypto)
[复制链接]
南琦
南琦
当前离线
积分
122
窥视卡
雷达卡
升级
48%
当前用户组为
秀才
当前积分为
122
, 升到下一级还需要 78 点。
34
主题
34
主题
34
主题
秀才
秀才, 积分 122, 距离下一级还需 78 积分
秀才, 积分 122, 距离下一级还需 78 积分
积分
122
发消息
楼主
|
发表于 2013-1-1 21:58:33
|
显示全部楼层
|
阅读模式
视觉密码(VisualCrypto)
<div id="cnblogs_post_body">先看效果图:
将其中一个图更改透明度为50%,重叠两张图后:
源于:
http://leemon.com/crypto/VisualCrypto.html
大家可以先去看看,作者的意思是,甲乙两方需要传递消息,可以事先说好密钥,传递消息时只要给其发送stream(明文)图片即可,另一方解密,只需输入密钥和相应的消息长度(输入等量空格)即可得到ciphertext(密钥)图片,最终得到消息内容。同一张密钥图片可以匹配多张明文。
原理很简单,作者根据所给口令(PASSPHRASE),使用
和
两张图片组成了一个图片,这张图片只与口令有关。然后对于加密内容,不需要替换的地方使用相反的图片,需要替换的使用原本的图片,这样两张图片相叠就能达到需要的效果。
暂不讨论此等加密的好坏,仅看到作者在最后那一串font的Array就让我感叹。
闲来无事,也想自己写个支持中文的,于是就有了C#版的VisualCrypto
由于其中使用了caozhy的字模点阵提取程序:
参见:
http://topic.csdn.net/u/20120629/17/a33f88b5-7ee8-4a0c-8915-c0c721bb30c9.html
源码也已上传:
http://files.cnblogs.com/nanqi/VisualCryptography.zip
个人思路
:
首先将
和
使用私有字段_unit代替
bool[][] _unit = new bool[][] { new bool[] { true, false, false, true }, new bool[] { false, true, true, false } };
将用户输入的口令处理为bool[256] dataCode即16*16的矩阵。
为true则使用第一个,为false使用第二个。最后得到bool[1024] _resultCode即32*32的矩阵。
通过字模点阵获取bool[256] dataMsg即16*16的矩阵。
与口令获取的bool[256] dataCode进行对比生成bool[256] dataDiff,dataMsg中为false的对dataCode取反,为true的不变。
与获得resultCode方式相同,使用dataDiff获得相应的_resultMsg。
画出两张图。
具体代码
:
<div class="cnblogs_code">
1
//
密码
2
byte
[] code =
System.Text.Encoding.Default.GetBytes(textBox1.Text.Trim());
3
4
if
(code.Length ==
0
)
5
{
6
code =
DEF_CODE;
7
}
8
else
if
(code.Length >
16
)
9
{
10
code = code.Take(
16
).ToArray();
11
}
12
else
13
{
14
while
(code.Length <
4
)
15
{
16
code =
code.Concat(code).ToArray();
17
}
18
}
19
20
code =
code.Concat(DEF_CODE.Skip(code.Length)).ToArray();
21
22
IEnumerable<
byte
> tmpDataCode = Enumerable.Empty<
byte
>
();
23
24
for
(
int
i =
0
; i < code.Length; i +=
4
)
25
{
26
tmpDataCode = tmpDataCode.Concat(SHA512Encrypt(code.Where((by, index) => (index &
3
) == (i /
4
&
3
)).ToArray()));
27
}
28
29
bool
[] dataCode = tmpDataCode.Select(by => Convert.ToBoolean(by &
1
)).ToArray();
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2008-2020
六狼论坛
(https://it.6wolf.com) 版权所有 All Rights Reserved.
Powered by
Discuz!
X3.4
京ICP备14020293号-2
本网站内容均收集于互联网,如有问题请联系
QQ:389897944
予以删除
快速回复
返回顶部
返回列表