Encryption 校验和的可视化表示算法(如SHA)

Encryption 校验和的可视化表示算法(如SHA),encryption,cryptography,sha,ascii-art,Encryption,Cryptography,Sha,Ascii Art,我想生成类似于SHA校验和的东西。但它应该适用于任何十六进制校验和 生成的工件可能是ASCII艺术、2D调色板或PNG中的一些随机垃圾。就个人而言,我喜欢VisualHostKey方法,但我愿意听取建议 这个想法是为了能够快速识别两个校验和是相同的,只需使用人眼。当遇到一大堆求和时,快速找到你要找的那一个。一般来说,这是通过制作一个接受种子的某种图像生成函数来实现的。然后散列一些数据,然后将结果作为图像生成器的种子。这将防止它在PNG中产生随机垃圾,并为您提供一些可区分的信息。您可以使用实际的O

我想生成类似于SHA校验和的东西。但它应该适用于任何十六进制校验和

生成的工件可能是ASCII艺术、2D调色板或PNG中的一些随机垃圾。就个人而言,我喜欢VisualHostKey方法,但我愿意听取建议


这个想法是为了能够快速识别两个校验和是相同的,只需使用人眼。当遇到一大堆求和时,快速找到你要找的那一个。

一般来说,这是通过制作一个接受种子的某种图像生成函数来实现的。然后散列一些数据,然后将结果作为图像生成器的种子。这将防止它在PNG中产生随机垃圾,并为您提供一些可区分的信息。

您可以使用实际的OpenSSH VisualHostKey代码,该代码可以在中的
key\u fingerprint\u randomart()
函数中找到。该算法相当简单,可以将任何字节数组作为输入。在OpenSSH中,输入是密钥的加密散列;你也可以这样做

(正如OpenSSH源代码中所定义的,该函数还获取一个指向密钥结构本身的指针,但该指针仅用于在图片顶部打印密钥的类型和大小。)

事实上,由于该代码是免费许可的,所以让我在这里包括一个副本。这是从OpenSSH 6.1中提取的,
$OpenBSD:key.c,v1.99 2012/05/23 03:28:28 djm Exp$

/*
*版权所有(c)20002001马库斯·弗里德尔。版权所有。
*版权所有(c)2008亚历山大·冯·格恩勒。版权所有。
*
*以源代码和二进制形式重新分发和使用,带或不带
*如果满足以下条件,则允许进行修改
*满足以下条件:
* 1. 源代码的重新分发必须保留上述版权
*请注意,此条件列表和以下免责声明。
* 2. 以二进制形式重新分发必须复制上述版权
*请注意,此条件列表和中的以下免责声明
*随分发提供的文件和/或其他材料。
*
*本软件由作者“按原样”和任何明示或暗示的
*默示保证,包括但不限于默示保证
*对于适销性和特定用途的适用性不作任何声明。
*在任何情况下,提交人均不对任何直接、间接,
*附带、特殊、惩戒性或后果性损害(包括但不限于
*不限于,替代货物或服务的采购;使用损失,
*数据或利润;或业务中断),无论是何种原因造成的
*责任理论,无论是合同责任、严格责任还是侵权责任
*(包括疏忽或其他)因使用
*此软件,即使已告知可能发生此类损坏。
*/
/*
*画一幅代表指纹的ASCII艺术画,这样人脑就可以
*得益于其内置的模式识别能力。
*这种技术被称为“随机艺术”,可以在一些艺术作品中找到
*像这篇原始论文这样的科学出版物:
*
*“哈希可视化:提高现实世界安全性的新技术”,
*Perrig A.和Song D.,1999年,密码技术国际研讨会
*技术与电子商务(CrypTEC'99)
*sparrow.ece.cmu.edu/~adrian/projects/validation/validation.pdf
*
*丹·卡明斯基在一次演讲中也提到了这个问题。
*
*如果您看到的图片不同,则键也不同。
*如果图片看起来一样,你仍然一无所知。
*
*这里使用的算法是蠕虫在离散平面上爬行,
*无论它走到哪里,都会留下痕迹(扩大视野)。
*从dgst_raw 2bit wise获取移动。撞墙
*使此回合忽略相应的运动矢量。
*图不是明确的,因为图中的圆可以是
*朝两个方向走。
*/
/*
*随机艺术的字段大小。必须是奇怪的,所以起点
*可以位于图片的正中间,而FLDBASE应该大于等于8。
*否则,图片会过于密集,画框会
*也会失败,因为密钥类型不再适合。
*/
#定义FLDBASE 8
#定义FLDSIZE_Y(FLDBASE+1)
#定义FLDSIZE_X(FLDBASE*2+1)
静态字符*
密钥指纹随机艺术(u_char*dgst_raw,u_int dgst_raw_len,const key*k)
{
/*
*每次蠕虫攻击后,都要使用字符
*与自身相交。品味的问题。
*/
char*augmentation_string=“.o+=*BOX@%&#/^SE”;
字符*retval,*p;
u_字符字段[FLDSIZE_X][FLDSIZE_Y];
u_int i,b;
int x,y;
尺寸长度=strlen(扩充字符串)-1;
retval=xcaloc(1,(FLDSIZE_X+3)*(FLDSIZE_Y+2));
/*初始化字段*/
memset(字段,0,FLDSIZE_X*FLDSIZE_Y*sizeof(char));
x=FLDSIZE_x/2;
y=FLDSIZE_y/2;
/*处理原始密钥*/
对于(i=0;i>2;
}
}
/*标记起点和终点*/