视觉密码(VisualCrypto)

先看效果图:

将其中一个图更改透明度为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获得相应的_re

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值