`
lobin
  • 浏览: 116943 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
哈希签名:哈希函数(hash)在数字签名中的实现思路   以下代码实现上的思路来自:Constructing Digital Signatures from a One Way Function, 文档资料源自http://lamport.azurewebsites.net/pubs/dig-sig.pdf, 这个是我下来上传的地址:http://dl.iteye.com/topics/download/f80e7b49-8d9c-30bb-9db9-8b3df6171465   public class HashDigest { private static byte[] privateKeyEncodedPart1 = null; private static byte[] privateKeyEncodedPart2 = null; private static byte[] publicKeyEncodedPart1 = null; private static byte[] publicKeyEncodedPart2 = null; @BeforeClass public static void init() { privateKeyEncodedPart1 = new byte[256 * 8]; privateKeyEncodedPart2 = new byte[256 * 8]; for (int i = 0; i < 256; i++) { Random random = new Random(); byte[] bytes = new byte[8]; random.nextBytes(bytes); System.arraycopy(bytes, 0, privateKeyEncodedPart1, i * 8, bytes.length); random.nextBytes(bytes); System.arraycopy(bytes, 0, privateKeyEncodedPart2, i * 8, bytes.length); } publicKeyEncodedPart1 = new byte[256 * 8]; publicKeyEncodedPart2 = new byte[256 * 8]; for (int i = 0; i < 256; i++) { byte[] t = new byte[8]; System.arraycopy(privateKeyEncodedPart1, i * 8, t, 0, t.length); t = hash(t); System.arraycopy(t, 0, publicKeyEncodedPart1, i * 8, t.length); System.arraycopy(privateKeyEncodedPart2, i * 8, t, 0, t.length); t = hash(t); System.arraycopy(t, 0, publicKeyEncodedPart2, i * 8, t.length); } byte[] privateKeyEncoded = getPrivateKeyEncoded(); System.out.println("private key: " + Base64.byteArrayToBase64(privateKeyEncoded)); byte[] publicKeyEncoded = getPublicKeyEncoded(); System.out.println("public key: " + Base64.byteArrayToBase64(publicKeyEncoded)); } private static byte[] getPrivateKeyEncoded() { byte[] encoded = new byte[privateKeyEncodedPart1.length + privateKeyEncodedPart2.length]; System.arraycopy(privateKeyEncodedPart1, 0, encoded, 0, privateKeyEncodedPart1.length); System.arraycopy(privateKeyEncodedPart2, 0, encoded, privateKeyEncodedPart1.length, privateKeyEncodedPart2.length); return encoded; } private static byte[] getPublicKeyEncoded() { byte[] encoded = new byte[publicKeyEncodedPart1.length + publicKeyEncodedPart2.length]; System.arraycopy(publicKeyEncodedPart1, 0, encoded, 0, publicKeyEncodedPart1.length); System.arraycopy(publicKeyEncodedPart2, 0, encoded, publicKeyEncodedPart1.length, publicKeyEncodedPart2.length); return encoded; } // 仅演示用 private static byte[] hash(byte[] input) { byte[] bytes = new byte[input.length]; for (int i = 0; i < input.length; i++) { bytes[i] = (byte) ~input[i]; } return bytes; } public byte[] digest(byte[] input) { byte[] digest = new byte[input.length * 8]; for (int i = 0; i < input.length; i++) { int j = input[i] % 256; if ((i & 0x01) == 0) { System.arraycopy(privateKeyEncodedPart1, j * 8, digest, i * 8, 8); } else { System.arraycopy(privateKeyEncodedPart2, j * 8, digest, i * 8, 8); } } return digest; } public boolean verify(byte[] input, byte[] digest) { for (int i = 0; i < input.length; i++) { byte[] t = new byte[8]; System.arraycopy(digest, i * 8, t, 0, t.length); int j = input[i] % 256; byte[] b = new byte[8]; if ((i & 0x01) == 0) { System.arraycopy(publicKeyEncodedPart1, j * 8, b, 0, b.length); } else { System.arraycopy(publicKeyEncodedPart2, j * 8, b, 0, b.length); } b = hash(b); for (int k = 0; k < t.length; k++) { if (t[k] != b[k]) { return false; } } } return true; } @org.junit.Test public void test() { String message = "13120983870"; System.out.println(message + ", base64: " + Base64.byteArrayToBase64(message.getBytes())); byte[] digest = digest(message.getBytes()); System.out.println("signature: " + Base64.byteArrayToBase64(digest)); boolean result = verify(message.getBytes(), digest); System.out.println(result); result = verify("13120983871".getBytes(), digest); System.out.println(result); result = verify("13120983879".getBytes(), digest); System.out.println(result); result = verify("abcdefg".getBytes(), digest); System.out.println(result); } }     private key: XWr0MDA1QDhJ8mOJYTcbp42679dMD48ny4JGhLIfjOz2mbqwYS19BeV2CGeYosenk5kClVqhaSG/MFnwb2FjWnbS1Pzf62Byz5J/4ectGya3JVpJE8Q3Vyzdrp0cD8bbfrwVByn4uv0GFccoi1b6hccq8B77faS82D3jh+MjI+hIpnNjLr9TQdkjUHVGn7y4Dg9lDmJv0h6452nQDVsgpHoyklkuUQYt6Yp2kxYXpbNrruz3all8LGxXWGbybV+652fUoSa7JE68uRrBupzBSDz3/p0zzQUtpgN4zBY2gSLKEzGyJw9a2yjGdCk6U0zOQPb9oFvlyXXNkxK6NzXObrVOT9dSAsNaheizl94s/kK6xG1fzNe2UX0/vSvIgNOiTMrWv4s3uua9AjtM2FnZYnhdj0ut+7sb9csQQdQzbP8q4x0DeelA4DsSb7t5BmQoKc1RBqzBOMiXUjBziUz2xVD1CA2ZVdVFiIBzWXyYXYqk+FNcgkJeTj4x/rBzOzrDPutpk6vd1beC3RKCOktabB+pw4rb3ACSU7Oq3olG/+EsIPepxnF99yLe3Gmf6XhTUq6w5g6B3sU1UB46aTKhQE6ildXJ06Rqojyafg7VbdzPvGKyl5PI0wt3vJBDLZ/PEzb2MNwvLNBMF4zwiZk8HYdP826Rt9dI92pgqJCBS57Ct51EDiHHz0VhGXN8tCQjP4DyvXA6s2oFp0odv5nvGTVkDGIsEucVOn3Mf2m6Rse6PA9Ap3UdFw6AemBQsap4QhLceFR4FVhXJUvKp7sL3cIN2M+GB5aEByKm8nS2q2G6wcTgMihblEUyLq9x3zajsLypAd+dzwUQIQMXa+CU59sFKcsiC5b59vGr/+oV3eNrNSdSSIerbYorU+D2+ORW57xx9VOVD+/ZAT1wOL3NJnwT6t5EFjhRw1LpIhpBJbhr6AppsTNR8HxndnT/rn0QS99ueA/ItBIGL8fvQfw+jUv5auB4FcP3wQbMPnEuUY8reykZygdjvN0p8q6H2fXY+PjxW3aP3DfarrRSgnsnVfNUNtV2wRBSvsJNPn5EzjG3DC1d6ne7oVwNP47J7nFW+0qm+y1uAzs2U5KdZ0xgN70AC0/F0cZ9HPZ3b1W9KPI4YqaXgnFK31//8vj8UsLvgPX85pP7HTP1SU172dtTCQ7Ltcn9nQFq8M9IHrrhGtkWzLY+abBpiR5cJbFrHfYnwCeUvwAxCZOccRLetpChaRgYoW1D42B7u3/4a9kBuc98IJefSdPAMr5uho13Vso3ZGsVQLUK5rir5wkx3Lh4KURyyQ/uyyE2U8jFtKytq5Hov3WeCGkkTCa5XmnwGqc+VJPPrA71VQrkl2TfzNexVsNuITU6l8PF+dEB2+Igjs4ezqsDl8vUwsFjBLXAL+oHuTh3K4LKrcRHS0KzSKJSYqbML4aXW9kpnguoHghYhGKPnziYVL2/E1vjTQczseuyKAVQt2aPrVmdGuUFg4mFGoWP2+2mvv3N81/mntmXk2rdLPlhu/Y77s8QbsHWNJwFMBkHN1zypq7Uxjk5unFMVxNZD/FK4ikZTkTfG9tLaPMHKtDoYJg5Yzg2YbZVKAlypETvfDWIi+xn06ickOsM5BHdWysGnhQK/jCvB8NEM0gErW5KXIjpVHPromk+sPVEnBhj4c9GzGtMTO8ywwiEcpsjD2fBtKFZhB7Whg6wbHsFtxJi07DVDhvxFTLlt+RxuLQtOj8huxSMxeqJFfj/bNwycBf3+tzNSbtLL79fyiibrzFJZV0zq2HIF+ji2xLaai+cH0qRBIhKXp1GDI6pjodkvMXGR992WX3HgucMV376Rv4uxr5jL0DYs3v0RnpQ8Ss2k9wxVnBloGcnDMmIviQynfiWX4b2AWLVIQ9AiUt9AR0bJQREfHurxo0TBplXMPDWMVnJJKerFR0eaMOqmWITeygyBouiSDtXU+9cbbReROr2zjOrVrFP2CaefmKPXqIMRikoerg3Ivcl81XC8z0M7zSsXZI6QA0qCeD4utZ7KfM/P6PrLhhjTU+cg1UQ1TPxVpTJ+BmT83Y5TNW52jeCaJ1lOGSpC7GZ/X7T3BCEnJNz8SIBdjgJH/uVPa/5BmskdyW2UeIrLrTiYXS8c4WCB1eRYwedEi0O1x/65UYxReySSpznpuhP0isXwgWHVszj0eXM2voT4wpk84gveuGSSARyPzPAR+WIm5vJL6MKCkawJs7kQjSL/wc1zaYk4JZ8uWtit2HPRXgq6XBCnE4RJXo0LM4c1M0w+i66xOmV5z1biB9gAHm+bZUMQG5k+QSqUszmjp6zcsZ4BVxPAlhOsJJ2flBtFx/QILeq59vqhkD4FW1lZ51BMVvT3AJc+Cj/dRCK1d2jmVuE1KD0EjnBrlZ6+XQQ+8JG4LReCHBM+9CJwQ6CWQvJhvf+N/UHBLCYCDF7btoTBuPeyf1cxGdWJKUtqJSmiscs9/qXZiWyc6OyPBhz/73AYAd71YRCp5gl8rip9x1SMkc7x5mo2XGaJIy0gdEdeFn1DopwkWLACMB4hbypogeoQxh6AYusn4kMgDkY23rRg3uDjSVKurHfuL6rFessTyiVkv6k9RZIaXYMVW00aGenfPV5GC3YoaNmwL9Vznk1Yedet2/N82bnU/EqYSryeILKQHwFUmq8l2S7jihWvi/OLZoBOSLrjfEY6Spv1QocjaKWOdJLk02H3VEVcz/sFV7zZ92zz26vF0/9n4f+pUcjFxOXVSGSaDm7K+s+mKsFMJ+qGvbSFw1kHQEphL86+xQDRbpfQM1xtxYh/I/8hvnlIJijtxwdITPRyUSKMHt9y9uygj3RHhF2OPWWHyPE5jtYV5eYhepDaVJs5PXFXYVxyR2kRq38aIFjDwM8So82YKpNR1VRvww+48VGqAHG0T1y8nnic2H8+jsyaFZTKKj+Z6tAMq/HTHyFuOxkoplmSD28fpoWZoeh6qbIhSoXo64SKZFLimDeBKQLzj7VU7PGeZ/EtIh2WsUcFU8w/eF3TgNMWpLDRfh4f//9WFql6qGTFT/g9GAptFadOY3TAyB0icW/vTLpWPzL7UeBpX08eqXSF4yc/zHSZSyd4Px/OUnZ8EapBKorLudbw4mz7/baCoXUPfHHkcpcXLVoQBoPFnV2Jej8BH8abfKy8ma7iqstKWe7zO0CxMm/uoJeMevmmR7R4bp+4pkM7iqwOmKvVLZY3G0VfZgCj6YL2xVtxKcn7Zs2yC/WXiESdKaEnPHLcyS73+8LAG4ZGBSpBPuPgLdmw3mbxUlcZvMjcNHX0moGOypv+QOIChqcUnaBDJ4CBcbK4oR1XQCtSrL9K0znAfhbIcYmCYruvvRgWD8ad7dfihG1USpbL7I6mKVPuQXxf/Q7AOUtiNc+xuXv/h4+goWZsZveSGeBq6d5/CTOIbRgApXBy6hrlLvGDrAWid+dzvDOjvB9VG9cRX7JEZKxl+R+cQU/KL3zVzWrjqK4uHOV+GA0W+Fs4P6PEhu5mqFPuUMsHU12+jG1DVQ86+tTG34Cga6pAh9eGide+xvKZ06EvqZ4X0gTp/9FbuE50Oj2OV9KoniYIoQvk2ftLg6jYK5m49yhMebx2F+hqSnUqnz09oX+gzCZy3vWsgmXXTbXZ1jbILK/o6Ev3TEY5StigxWTR3zLNMhGiqqhKYKqx6kKwSYtdmKuuu/Bg8iLq2Vns+Qo9agO3BguLHNEmMcxSzklug1yu+QhAdw4Bba7A8g4HoeoEKSBUphBfa7iTQ78QXlWlJRAPKZg5VFAf6j117i51v8WQNklcOt2/P0Jc+1x1psh0gYNpJNjDvsKBiuhbZlS3k15+wT4Q4rXAyMGat6w6O2akFkHLBekdoeBiSevWgh6RhTchmOhqouVZjIzi9GXgm/N26RFKHPlA0MQRKaYragrq/8qk8tRtWVOdTNiOMFvDz5grgPxeykW0SOUow2dNnnkgfJO/eDzzhXFum/nKZhDDWNY4C3zXxa1GjT9dNMcNnpO0X29tdH8yNdeBi4dXU3jyIf2Nu0RpTSJzr0m9d2I8cTHiUiX4MAirHb8jHO+cKfE52ucS4DBnYAh91KWU+552hYR/5d+GlCVAZWkFzy65Yz+1l2+j2jLBaNozOsEpcBuY74/mIlO1fWGGs86tIDVBSEmHQIjyS2fjykfqPkogHYhpHLLst4xsLVlNHBYcju35wAj8uLxjmz4OR4D7gklKDAoWmsXMatW5DPSM0aEJa2lSFlR3tQR/wreZqAQd9CRR23nBcC63x/AYdBOEEW0NHN1vNTNBrhi1jlJrjS28g38p9sMTPuQTTGSmSGHdSXKnFUdpAEJ+5sfAbRyfMpfKhfg0ADlplKLG3cj3yBMmB1Xz/Rk6KCrYvHMWQK6uUD4uFxln2BVwnl/w3GLvaiqNrP7/wR5VEBc52fDlGE72N0fwrVJ+X2aGuXsW33Kwq2xF7bs/oVuHKXBBBOqQkepSiphFAGWOTnvfHJ+daNlzKYaC8RKru4MPQUlZ6xD4apvJHZxVFj96t4Eu91QVLK4OLQjSszbFH815dQvVmks215MBdhdAfWTcnM/p3b6CuDdc9YCGY8sbY6k6ajB35xqT2ry+kNOx+dYfIgBqB6osQtKFfk8EtyUFTQKg66C+kYyEmnA9efCTl5/Dx9I267fUCZS3249ayumpBoTfl2xolDJ3RUq3UvM5a/AQiPL+EFkqZrKVoI99HPjoLCanM829CfzFtF65qy26hGorc3cpQqr00HoI5LmKpDq4rAbfm4oJzKGMgxyz5nKoz6vvf3hph4xHcqp5iOkeqgEthAh3j5wZqc4BcNqyH4yDCQjsmQnXKhelPdVb9tpXonrjQwHnR/aVJxl7m9/EyEEyR/PV1UQ0LoZ0SDCU+FGFCu77Ss/bx2rOy78EnmXl4BTdwuZai3C9dxa6yMV5H2X6N8o1Pr/cZOs3jeiSWzNwcJDOhG7K9QAB95ea4bXt4Cz6CnnVlUCAtbTXL0ciaD/WnXj04Xwcq9wBpvcc2GAQTNTmd3nHIzLsU7N8Hl3AD6azyWU56CYLzs/vkwB5DbuEKMWmoSldIaVBVrn1CP9IpWzFnVR4PIphY30+yxUeCMqlZZ2TkthOuvZLdKTELY/xT+S7XOwTY2yWHjz30EDKmDWCnTCsGTFIxLrqBr7119jSICEhOjaSnPcFU7eYbRUbpiY0WF7H4qF/AjQgObxKAWPtbXmg3ytxwLiwvLVTDckhmpsHjVX3KOy9RaRW5ubwPAC/wb703jRHyGuz7sAMjoSR95oTwDVkFzQfpkdsXzMAzUnt82WLCiUAUfTmGy8uPH1mvLr5Vqw1C4nCJYdhjfFkROLMs6SzBpBQ3+6q1pCyQQ9Mph3Eq7S48RcxTxaNx+XiEoXHrNUgoMgNIY7OVoexpWEI0RN9V9Sh9SqNLupWPme1EcELeZ6EWKjmhe93UG1ug== public key: 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 13120983870, base64: MTMxMjA5ODM4NzA= signature: gt0SgjpLWmyPgLdmw3mbxYLdEoI6S1psAG4ZGBSpBPs+62mTq93Vt+cB+FshxiYJTqKV1cnTpGqPgLdmw3mbxU6ildXJ06RqngIFxsrihHU+62mTq93Vtw== true false false false   1、Constructing Digital Signatures from a One Way Function, http://lamport.azurewebsites.net/pubs/pubs.html#dig-sig 2、Constructing Digital Signatures from a One Way Function, http://lamport.azurewebsites.net/pubs/dig-sig.pdf      
0
0
分享到:
评论
相关资源推荐
  • 数字签名算法分析与Hash签名 序:这篇文章我用了近一周的时间完成,其中涉及到的RSA算法已经在上一篇《公钥密码体系》中详细的介绍过,目前数字签名中人们使用很多的还是512位与1024位的RSA算法。     摘要: 数字签字和认证机构是电子商务的核心技术。数字签名作为目前Internet中电子商务重要的技术,不断地进行改进,标准化。本文从数字签名的意义出发,详细介绍了数字签名中涉及到的内容与算法,并自行结合进行改进。     
  • 2017.8.7 hash测试 与数字签名 **一、关于数字签名** http://blog.csdn.net/oscar999/article/details/9364101 这个地方将的比较详细,可以仔细看看;数字签名: 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。 将该报文摘要值用发送者的私人密钥
  • 白话hash数字签名,保证你看得懂(从零开始学区块链 195) 最近有朋友在后台问为啥最近老介绍hash相关文章,其实hash算法在信息安全中非常重要,尤其是作为数字签名中非常重要的一环,今天就来详细把这个事情讲清楚白话hash可能以前的文章讲得不够简单,hash算法其实就是将一段非常长的数据通过hash变换为一个固定长度相对较短的数据,简称“摘要”,你可以理解成把一本书通过hash变成一段很短的话,算法最关键的要点是,哪怕你改动了这本书里面的一个标点符号,h
  • 签名与加密安全技术基础(一)------哈希算法 一、hash算法 著名的hash算法,MD5和SHA1可以说是目前应用最广泛的Hash算法,而它们都是以MD4为基础设计的。那么他们都有什么用途呢? 哈希算法有如下特性: 1)不可以从消息摘要中复原信息; 2)两个不同的消息不会产生同样的消息摘要; 1.1 MD5算法 MD5是RSA数据安全
  • (转)区块链:哈希、公钥、私钥、加密、数字签名、数字证书、默克尔树、零知识证明
  • 文档的相似度(2)--最小哈希签名
  • Python使用hashlib模块生成给定文本数据的签名摘要信息(包括各种哈希函数)      今天晚上遇上一个需要使用签名摘要的问题,想到了研究生期间使用hashlib模块曾经产生了需要的签名,这里就重操旧业,找出来了原来的项目文件,梳理了一下,就完成了这个需求了,这里只是为了简单地记录一下,也是希望能帮到需要的朋友,实现很简单,下面是具体的实现,里面有相应的注释,就不多解释了。 hash_func.py #!usr/bin/env python #encoding:utf...
  • 将集合转成特征矩阵并且使用最小Hash算法构造签名矩阵 2、如何计算集合的最小hash值呢? 主要也是通过特征矩阵的变换进行计算 3、具体的使用最小hash算法,将一个特征矩阵进行压缩,即构造签名矩阵,签名矩阵的每一列是n个hash函数的值,并且近似估计原始数据的jaccard的值。 实际中是如何计算的呢? (1)首先自己常见n个h(x)函数 ,并且计算出对于原始行的hash值 (2)h(x)作用于每一行,如果当前的值为0,什么都不做
  • 数据结构之哈希函数 概念:哈希hash),也叫做散列、数据摘要等,是一种常见的数据结构。哈希的表的核心概念分为哈希表和哈希函数。哈希表(hashTable)哈希表之前讲过,有需要的可以参考:点击打开哈希哈希函数哈希函数就是将某一不定长的对象映射为另一个定长的对象。能够做到这一点的函数有很多,那什么可以作为哈希函数?这里我们首先要明确下什么可以作为哈希函数。如果两个不同的对象经过哈希函数计算后得到相同的哈希值,则这
  • Hash算法(含python实现 1. 简介 哈希hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过散列函数变换成一个定长的输出,即散列值。 这种散列变换是一种单向运算,具有不可逆性即不能根据散列值还原出输入信息,因此严格意义上讲Hash算法是一种消息摘要算法,不是一种加密算法。常见的hash算法有:SM3、MD5、SHA-1等 。 2. 应用 Hash主要应用在数据结构以及密码学领域。 在不同的应用场景...
  • 【IoT】加密与安全:非对称加密算法 RSA CA 证书与哈希算法签名 1、RSA 证书与 CA 1.1、CA 证书发放 CA 在证书的末尾会添加一段签名,让用证明该 CERT 是 CA 发放的。 - 证书 - 对证书的签名 证书体: typedef struct { uint8 cert[CERT_LEN]; uint8 certSign[CERT_SIGN_SIZE]; } CERT; CA 用自己的私钥对这一段证书 ( cert[CERT_...
  • 变色龙哈希函数 Chameleon Hash 可变型区块链 哈希函数 Hash: 众所周知,区块链有着极其优秀的安全性就是因为其充分使用了哈希函数。 哈希简单用一句话来讲,就是:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原出原始字串。 哈希函数特征: 1. 对于任意m作为输入,得到输出的结果,很难找到另一个输入m'  (m'不等于m),使得m'的Hash结果也为同样的输出
  • MinHash (最小哈希) 本文转自:http://1.cool.sinaapp.com/?p=893 minhash是判断文档相似的一种方法。这里结合一个具体的示例来简单过一下: 一、全集 {a,b,c,d,e},S1={a,d}, S2={c}, S3={b,d,e}, S4={a,c,d}。 具体含义:比如  S1,S2,S3,S4分别是4个文档,a,b,c,d,e可以是相应的文档特
  • MAC消息认证码与Hash函数的关系和区别 更多 两个是个不同范畴的东西 Hash A hash is a function that produces a digest from a message. A cryptographically secure hash is for which it is computationally infeasible to generate a message with a given dige...
  • 哈希的简单实现        在前面的学习中,我们看了静态查找和动态查找,今天我们来看哈希查找。线性表,二叉搜索树,AVL树,红黑树和B树,元素在存储结构中的位置与元素的关键码之间不存在直接的对应关系。在这些数据结构中,查找一个元素需要进行一系列的关键码的比较。查找的效率取决于查找过程中比较的次数。 1. 哈希查找的定义          在插入或者查找时,根据元素的关键码,以哈希函数计算出该元素的存储位置并...
  • 哈希算法(HASH)在信息安全应用 1、HASH的定义Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。2、数学表...
  • 对称加密算法、非对称加密算法、散列函数与数字签名的介绍
  • 密码学基础知识(六)Hash函数与消息认证 Hash函数和消息认证 先说Hash 哈希函数,可以将任意长度的消息压缩为某一固定长度的消息摘要函数。一句话,Hash简直了。 当然有逆天的一面就有大缺点,过程不可逆。傻了吧,哈哈。 Hash的性质: 1.    (逆天特性)应用于任意长的消息,产生固定长的输出(散列值,消息摘要,数字指纹随便你叫什么了); 2.    (单向性)对于给定消息x,H(x)很容易得出。但是对于给定z,寻找
  • C# 使用MD5等哈希算法 C# 使用MD5等哈希算法 问题描述 在对密码等敏感信息进行网络传输和保存时,往往不直接保存其原本值,而是在服务器端数据库存储其哈希值,比较常用的有如MD5,SHA1等等。而客户端则需要将用于输入的明文密码转换为MD5(或其他哈希算法)哈希值后再传输给服务器。 解决方法 客户端对MD5加密的程序如下: 1.首先引用命名空间System.Security.Cryptography:...
  • 最小完美哈希函数简介 http://www.yankay.com/introduction-to-opmphf/ 什么是保序最小完美哈希函数 我曾经花了很多脑筋来找一个很好很完美的哈希算法,但都没有想到,最近看到了,掩不住一阵激动分享下。最小完美哈希函数是什么,要从定义说起,这个名字很长,一步步解释。 哈希函数 任意函数h(x)都可以说哈希函数,一般来说,一个良好的哈希函数可以尽量避免重复。x
Global site tag (gtag.js) - Google Analytics