今天在研究QQ登陆的时候又发现一个值是和上次bkn加密方式有点像的,然后这次似乎看到了名字Hash33 然后这里就做一个笔记吧,说不定下次还有用。 def hash33(t): e = 0 for i in range(len(t)): e += (e << 5) + ord(t[i]) return 2147483647
MD5属不属于加密算法,因为只可以加密,无法获得密码原文,只能属于算法。 常见的加密算法 常用加密算法可以分为单向加密和双向加密。 单向加密:只提供单向加密不能解密,不可逆的过程。 通常用来存储用户名和密码,直接从前端传输来存储到数据库中 双向加密:又分为对称性加密算法和非对称性加密算法。 对称性加密算法,发送和接收端双方都知道秘钥和加密算法且秘钥都是相同的,之后便是对数据的加密和解密过程。 非对称加密算法 :发送之前A B事先生成一对秘钥,A将秘钥发送给B,B将秘钥发送给 A,A先用B的秘钥加密密文在发送B,B解密,同理。 的散列值(hash value),用于确保信息传输完整一致。
MD5在我们平时项目中运用比较多,尤其是在用户注册的时候,密码存入数据库时可以利用MD5算法加密后存入,可以保证数据的安全性。 代码实现 public final class Md5Util { private static String[] hex = {"0","1","2","3","4","5","6","7","8" ,"9","a","b","c","d","e","f"}; private Md5Util(){} public static String encodeByMd5(String password ) throws Exception{ // MessageDigest类封装了MD5算法 MessageDigest md5 = MessageDigest.getInstance("MD5"); = Md5Util.encodeByMd5("123456"); System.out.println(MD5Password); } } 结果展示
阅读更多 MD5加密算法简介 一、算法实现 1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果 是448。 即数据扩展至K*512+448位。 初始化MD5参数 四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表示 的数字 A=0X01234567 B=0X89abcdef G(X,Y,Z) = X&Z|Y¬(Z) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor (X|not(Z)) 5、 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB
#import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> @interface MD5 : NSObject /** * MD5加密,传入需要加密的字符串,不可逆 * * @param str 需要加密的字符串 * * @return 加密后字符串 */ + (NSString *)md5:(NSString *)str; @end 类的实现 #import "MD5 .h" @implementation MD5 + (NSString *)md5:(NSString *)str { const charchar md5:str]; NSLog(@"str=%@,str1=%@",str,str1); 输出结果 TestMD5[659:20205] str=准备加密,str1=54a96da37e422e51
package com.b510.note; 2 3 import java.math.BigInteger; 4 import java.security.MessageDigest; 5 import java.security.NoSuchAlgorithmException; 6 7 /** 8 * MD5加密 9 * 10 * @author Hongten 11 (MD5.getMD5("123456")); 17 } 18 19 /** 20 * 用md5编码后的码值 21 * 22 * @param sInput 23 * 明码 24 * @return md5加密后的密码 25 */ 26 public static String getMD5(String algorithm", "MD5"); 34 } catch (SecurityException se) { 35 } 36 MessageDigest
Recently I have been dealing with files and I need to get md5 hash of all kinds of files;Some are small For the small files I use this method to get md5 hash value. 1 2 3 4 5 6 7 def getFileMd5(filename): m.hexdigest() return result However for calculating md5 hash value of big files,the above method 6 7 8 9 10 def getBigFileMd5(filename, block_size=2**20): f = open(filename, 'rb') m = md5() hash of a Big file(size:10.7 GiB; 11,455,512,109 bytes) is 213.447s.And I think it’s OK.
Hash Table 概念 Hash Table 是一个无序的 key 到 value 的映射实现,它使用一个哈希函数计算数据存储到数组中(槽位)的位置,并且平均情况下,能够在 O(1) 的时间内访问元素 Hash 函数 从前面的描述中可以看到,哈希函数在 Hash Table 中的作用至关重要。 Linear Probe Hash 线性探测(Linear Probe)是一种比较直观简洁的 Hash Table 实现方式了。 Cuckoo Hash cuckoo hash 使用多个哈希表,并且每个哈希表使用一个不同 seed (随机种子)的哈希函数。 Extendible Hash extendible hash(可扩展哈希)和 chained hash 比较类似,都使用到了bucket 这个概念,同时也会有一个执行 bucket 的指针数组。
如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。 127.0.0.1:6379> hgetall website 1) "google" 2) "www.google.com" 3) "baidu" 4) "www.baidu.com" 5) "yahoo 127.0.0.1:6379> hgetall website 1) "google" 2) "www.google.com" 3) "baidu" 4) "www.baidu.com" 5) "yahoo hdel website baidu yahoo (integer) 2 127.0.0.1:6379> hgetall website 1) "google" 2) "www.google.com" 5、 127.0.0.1:6379> hgetall website 1) "google" 2) "www.google.com" 3) "baidu" 4) "www.baidu.com" 5)
应用场景 Hash也可以同于对象存储,比如存储用户信息,与字符串不一样的是,字符串是需要将对象进行序列化(比如json序列化)之后才能保存,而Hash则可以讲用户对象的每个字段单独存储,这样就能节省序列化和反序列的时间 第一维 hash 的数组位置碰撞时,就会将碰撞的元素使用链表串接起来。 5 (integer) 1 > HINCRBY myhash1 5 2 (integer) 7 increment增量可以为负数 自增给定浮点增量(HINCRBYFLOAT) # increment $i,$i); } HSCAN 查询 > HSCAN hash2 0 MATCH "key:99*" count 10000 1) "0" 2) 1) "key:9956" 2) "9956 " 3) "key:9998" 4) "9998" 5) "key:9905" .... 221) "key:9962" 222) "9962
5. ) 返回值:该字段变化之后的值 HINCRBYFLOAT(HINCRBY 的浮点数版本) 案例: 127.0.0.1:6379> HSET myhash f 5 (integer) 1 127.0.0.1 ,根据 uid 获取用户信息 UserInfo userInfo = mysqlService.getUserInfoByUid(uid); // 假设存在一个数据库查询服务 // 5. James" age 23 city "Beijing" OK 127.0.0.1:6379> hgetall user:1 1) "name" 2) "James" 3) "age" 4) "23" 5) (integer) 1 //返回值0代表改field在哈希表中不存在,为新增的field 如果用户购买的商品已经存在于散列里面,那么新的订购数量会覆盖已有的订购数量; Copy//用户1 商品1 数量5
非对称安全性稍微高一点 有2个秘钥,一般是成对的公钥和私钥 通常是用公钥加密,私钥解密 这种情况下,解决了对称加密的发送秘钥问题 现在公钥是公开的,私钥只有我自己有 永远不发送,就不会泄密 ---- 摘要加密一般采用的是hash /6S5nU0gX9D5fYlF/fz4YTfBjHC2dZ/wrmWlJA0f7QFf5DysQB9AXJX6ZWL/3LkMtHPafqBMKpJw== publicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwYK1DkMkkAe9laxsoo2GXGjTNurePaGipTXXbuEi6RHSc6VJ1Y17SIvTY /w5BQV4EgfRWHa7+zKUFs05i8NHaOqXH6NnHpJgRj5xUXQobRH/DaatKQFdi5TWocJAfH8WXG0GGmlgbgZMe2h09PSRrBKYvT98u2nuL8GJhZVoBBwIDAQAB , 也不知道我实际的密码是123456 当登陆时,会对用户输入的密码再次md5, 如果结果还等于e10adc3949ba59abbe56e057f20f883e, 就表示输对了密码。 ---- 摘要加密的特点是 输出结果位数是固定的 比如上面列出的md5,加密后永远是固定长度 他的特点主要是: 输入不同,加密结果就不同 输入相同,加密结果一定相同 现在一般md5用的也少,主要是长度和复杂度
加密算法是旅居瑞士中国青年学者来学嘉和著名密码专家J.Massey于1990年提出的。它在1990年正式公布并在以后得到增强。 类似于DES,IDEA算法也是一种数据块加密算法,它设计了一系列加密轮次,每轮加密都使用从完整的加密密钥中生成的一个子密钥。与DES的不同处在于,它采用软件实现和采用硬件实现同样快速。 (5)将第(1)步和第(3)步的结果相异或。·(6)将第(2)步和第(4)步的结果相异或。(7)将第(5)步的结果与第五个子密钥相乘。(8)将第(6)步和第(7)步的结果相加。
对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。 而与公钥、密钥加密算法比起来,对称加密算法能够提供加密和认证却缺乏了签名功能,使得使用范围有所缩小。 ZerosPadding 方式:全部填充为0的字节 结果如下: F1 F2 F3 F4 F5 F6 F7 F8 //第一块 F9 00 00 00 00 00 00 00 //第二块 PKCS5Padding 方式:每个填充的字节都记录了填充的总字节数 结果如下: F1 F2 F3 F4 F5 F6 F7 F8 //第一块 F9 07 07 07 07 07 07 07 //第二块 常用算法 对称加密算法主要有 = "DES/ECB/PKCS5Padding"; // 算法/模式/补码方式 public static final String CIPHER_DES_CBC_PKCS5PADDING = "DES 因此,非对称加密算法也称为双钥加密算法或公钥加密算法。 特点 优点 非对称加密算法解决了对称加密算法的密钥分配问题,并极大地提高了算法安全性。
map = new HashMap<>(); map.put("key1",value1); map.put("key2", value2); //以上代码在初始化map是会先调用hashmap中的hash ()方法,且hashmap的初始数据结构为数组加链表的结构体系 static final int hash(Object key) { int h; return (key ; final K key; V value; Node<K,V> next; Node(int hash, K key, V value , Node<K,V> next) { this.hash = hash; this.key = key; this.value ; //可以看出hashmap和hashtable在获取hash整型后存入的数组下标的地址的获取方法存在差异 //hashmap存在最坏情况,即所有的值通过hash整数与数组长度的位运算存入的index
这是这个系列的第五期,本期到了SQL 执行计划中经常会出现的两个熟悉的面庞, hash-base sort-Merge ,当然还有nested loops ,顺便这期还的说说索引,其中包含b-tree 下面就到标题中的下一个议题,nested loops , hash base, sort-merge 这三个2个表结合时的处理方法。 基于上面的Nested loop 的性能问题,针对与表之间的关系有了新的方式进行数据的过滤,hash base ,hash join , 这个方法是将其中一个表中的关联的值通过hash 算法的方式将计算好的值放置到 采用的是 BLOOM 过滤器来操作的比对,这比在桶中使用nested loop的方式要更快 cost(hash,R,S)=size(R)+size(S)+size(R)*size(S)/size(JA ) HASH BASE 的方式也会受制于表的大小以及这些HASH 的数据是否可以直接存储在内存中,如果这些HASH 的值无法存在内存中,则效率会大大的降低。
这里先讲解 Hash函数。 Hash函数 从上面的图可以观察到,中间的部分的部分为 Hash函数,也称为散列函数。它在散列表中起着关键作用。 Hash函数一般使用 hash(key)表示,其中 key表示元素的键值部分, hash(key)的表示经过 Hash函数计算得到的 Hash值(散列值)。 不同的应用实例 Hash函数不同,该怎么去构造 Hash函数,一般遵循一下三条: Hash函数计算得到的散列值是一个非负整数; 如果 key1==key2,那么 hash(key1)==hash(key2 =key2,那么 hash(key1)!=hash(key2). 对于第一条很好理解,因为数组的下标是从0开始,所以 Hash函数生成的 Hash值也需要是非负整数。 对于第二条,相同的 key经过 Hash函数处理后得到的 Hash值应该也是相同的。
一旦提到加密算法,经常有人会有这样的疑问:MD5 到底算不算一种加密算法呢? 在回答这个问题之前,我们需要先弄清楚两点: 什么是加密算法? 什么是 MD5? 1什么是加密算法? 加密算法分类 常见的加密算法大体可以分为两大类:对称加密和非对称加密。 对称加密 对称加密算法就是用一个秘钥进行加密和解密。 非对称加密 与对称加密算法不同的是,进行加密与解密使用的是不同的秘钥,有一个公钥-私钥对,秘钥正确才可以正常的进行加解密。 2什么是MD5? 它们竟然有着共同的MD5值(☞ 注意看,数据源1、2是存在很多细节不同的): 79054025255fb1a26e4bc422aef54eb4 3MD5是加密算法吗? 也就是说,MD5 算法和加密算法都可以将信息转换为另外一种内容,但是,MD5 算法对比 加密算法 缺少了解密过程。 好比一头山羊,被层层加工制作成一包包风干羊肉,这个就是一次MD5操作。
今天分享的是spark-md5这个包,可以根据内容获取唯一的hash。 安装: npm install --save-dev spark-md5 有两种hash,一个是hex hash十六进制,一个是raw hash(不知道翻译成什么): import SparkMD5 from 'spark-md5' var hexHash = SparkMD5.hash('Hi there'); // hex hash var rawHash = SparkMD5.hash('Hi console.log(rawHash); //Ù8TbÓÞÿxÃRë³ùAÎ 还有另外一种用法,但是raw hash获得的结果不一样: var spark = new SparkMD5(); spark.append let fileReader = new FileReader(); fileReader.onload = function (e) { let hexHash = SparkMD5.hash
MD5是哈希散列算法,对于MD5而言,有两个特性是很重要的,第一:明文数据经过散列以后的值是定长的;第二:是任意一段明文数据,经过散列以后,其结果必须永远是不变的。 java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * * @项目名 ssh * @功能 MD5加密算法 * @类名 Md5Encrypt * @作者 Java自学网 * @日期 Aug 30, 20113:43:23 PM * @版本 1.0 */ public class Md5Encrypt { / * * Used building output as Hex */ private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5' = new String(encodeHex(bytes)); return md5Str; } public static char[] encodeHex(byte[] data) { int l