精华内容
下载资源
问答
  • 本文摘录自《Nodejs学习笔记》,更多章节更新,请访问 github主页地址。欢迎加群交流,群号 197339705。 简介 MD5(Message-Digest Algorithm)是...本文先对MD5的特点应用进行简要概述,接着重点介绍MD5在...

    本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问 github主页地址。欢迎加群交流,群号 197339705

    简介

    MD5(Message-Digest Algorithm)是计算机安全领域广泛使用的散列函数(又称哈希算法、摘要算法),主要用来确保消息的完整和一致性。常见的应用场景有密码保护、下载文件校验等。

    本文先对MD5的特点与应用进行简要概述,接着重点介绍MD5在密码保护场景下的应用,最后通过例子对MD5碰撞进行简单介绍。

    特点

    1. 运算速度快:对jquery.js求md5值,57254个字符,耗时1.907ms
    2. 输出长度固定:输入长度不固定,输出长度固定(128位)。
    3. 运算不可逆:已知运算结果的情况下,无法通过通过逆运算得到原始字符串。
    4. 高度离散:输入的微小变化,可导致运算结果差异巨大。
    5. 弱碰撞性:不同输入的散列值可能相同。

    应用场景

    1. 文件完整性校验:比如从网上下载一个软件,一般网站都会将软件的md5值附在网页上,用户下载完软件后,可对下载到本地的软件进行md5运算,然后跟网站上的md5值进行对比,确保下载的软件是完整的(或正确的)
    2. 密码保护:将md5后的密码保存到数据库,而不是保存明文密码,避免拖库等事件发生后,明文密码外泄。
    3. 防篡改:比如数字证书的防篡改,就用到了摘要算法。(当然还要结合数字签名等手段)

    nodejs中md5运算的例子

    在nodejs中,crypto模块封装了一系列密码学相关的功能,包括摘要运算。基础例子如下,非常简单:

    var crypto = require('crypto');
    var md5 = crypto.createHash('md5');
    
    var result = md5.update('a').digest('hex');
    
    // 输出:0cc175b9c0f1b6a831c399e269772661
    console.log(result);

    例子:密码保护

    前面提到,将明文密码保存到数据库是很不安全的,最不济也要进行md5后进行保存。比如用户密码是123456,md5运行后,得到输出:e10adc3949ba59abbe56e057f20f883e

    这样至少有两个好处:

    1. 防内部攻击:网站主人也不知道用户的明文密码,避免网站主人拿着用户明文密码干坏事。
    2. 防外部攻击:如网站被黑客入侵,黑客也只能拿到md5后的密码,而不是用户的明文密码。

    示例代码如下:

    var crypto = require('crypto');
    
    function cryptPwd(password) {
        var md5 = crypto.createHash('md5');
        return md5.update(password).digest('hex');
    }
    
    var password = '123456';
    var cryptedPassword = cryptPwd(password);
    
    console.log(cryptedPassword);
    // 输出:e10adc3949ba59abbe56e057f20f883e

    单纯对密码进行md5不安全

    前面提到,通过对用户密码进行md5运算来提高安全性。但实际上,这样的安全性是很差的,为什么呢?

    稍微修改下上面的例子,可能你就明白了。相同的明文密码,md5值也是相同的。

    var crypto = require('crypto');
    
    function cryptPwd(password) {
        var md5 = crypto.createHash('md5');
        return md5.update(password).digest('hex');
    }
    
    var password = '123456';
    
    console.log( cryptPwd(password) );
    // 输出:e10adc3949ba59abbe56e057f20f883e
    
    console.log( cryptPwd(password) );
    // 输出:e10adc3949ba59abbe56e057f20f883e

    也就是说,当攻击者知道算法是md5,且数据库里存储的密码值为e10adc3949ba59abbe56e057f20f883e时,理论上可以可以猜到,用户的明文密码就是123456

    事实上,彩虹表就是这么进行暴力破解的:事先将常见明文密码的md5值运算好存起来,然后跟网站数据库里存储的密码进行匹配,就能够快速找到用户的明文密码。(这里不探究具体细节)

    那么,有什么办法可以进一步提升安全性呢?答案是:密码加盐。

    密码加盐

    “加盐”这个词看上去很玄乎,其实原理很简单,就是在密码特定位置插入特定字符串后,再对修改后的字符串进行md5运算。

    例子如下。同样的密码,当“盐”值不一样时,md5值的差异非常大。通过密码加盐,可以防止最初级的暴力破解,如果攻击者事先不知道”盐“值,破解的难度就会非常大。

    var crypto = require('crypto');
    
    function cryptPwd(password, salt) {
        // 密码“加盐”
        var saltPassword = password + ':' + salt;
        console.log('原始密码:%s', password);
        console.log('加盐后的密码:%s', saltPassword);
    
        // 加盐密码的md5值
        var md5 = crypto.createHash('md5');
        var result = md5.update(saltPassword).digest('hex');
        console.log('加盐密码的md5值:%s', result);
    }
    
    cryptPwd('123456', 'abc');
    // 输出:
    // 原始密码:123456
    // 加盐后的密码:123456:abc
    // 加盐密码的md5值:51011af1892f59e74baf61f3d4389092
    
    cryptPwd('123456', 'bcd');
    // 输出:
    // 原始密码:123456
    // 加盐后的密码:123456:bcd
    // 加盐密码的md5值:55a95bcb6bfbaef6906dbbd264ab4531

    密码加盐:随机盐值

    通过密码加盐,密码的安全性已经提高了不少。但其实上面的例子存在不少问题。

    假设字符串拼接算法、盐值已外泄,上面的代码至少存在下面问题:

    1. 短盐值:需要穷举的可能性较少,容易暴力破解,一般采用长盐值来解决。
    2. 盐值固定:类似的,攻击者只需要把常用密码+盐值的hash值表算出来,就完事大吉了。

    短盐值自不必说,应该避免。对于为什么不应该使用固定盐值,这里需要多解释一下。很多时候,我们的盐值是硬编码到我们的代码里的(比如配置文件),一旦坏人通过某种手段获知了盐值,那么,只需要针对这串固定的盐值进行暴力穷举就行了。

    比如上面的代码,当你知道盐值是abc时,立刻就能猜到51011af1892f59e74baf61f3d4389092对应的明文密码是123456

    那么,该怎么优化呢?答案是:随机盐值。

    示例代码如下。可以看到,密码同样是123456,由于采用了随机盐值,前后运算得出的结果是不同的。这样带来的好处是,多个用户,同样的密码,攻击者需要进行多次运算才能够完全破解。同样是纯数字3位短盐值,随机盐值破解所需的运算量,是固定盐值的1000倍。

    var crypto = require('crypto');
    
    function getRandomSalt(){
        return Math.random().toString().slice(2, 5);
    }
    
    function cryptPwd(password, salt) {
        // 密码“加盐”
        var saltPassword = password + ':' + salt;
        console.log('原始密码:%s', password);
        console.log('加盐后的密码:%s', saltPassword);
    
        // 加盐密码的md5值
        var md5 = crypto.createHash('md5');
        var result = md5.update(saltPassword).digest('hex');
        console.log('加盐密码的md5值:%s', result);
    }
    
    var password = '123456';
    
    cryptPwd('123456', getRandomSalt());
    // 输出:
    // 原始密码:123456
    // 加盐后的密码:123456:498
    // 加盐密码的md5值:af3b7d32cc2a254a6bf1ebdcfd700115
    
    cryptPwd('123456', getRandomSalt());
    // 输出:
    // 原始密码:123456
    // 加盐后的密码:123456:287
    // 加盐密码的md5值:65d7dd044c2db64c5e658d947578d759

    MD5碰撞

    简单的说,就是两段不同的字符串,经过MD5运算后,得出相同的结果。

    网上有不少例子,这里就不赘述,直接上例子,参考(这里)[http://www.mscs.dal.ca/~selinger/md5collision/]

    function getHashResult(hexString){
    
        // 转成16进制,比如 0x4d 0xc9 ...
        hexString = hexString.replace(/(\w{2,2})/g, '0x$1 ').trim();
    
        // 转成16进制数组,如 [0x4d, 0xc9, ...]
        var arr = hexString.split(' ');
    
        // 转成对应的buffer,如:<Buffer 4d c9 ...>
        var buff = Buffer.from(arr);
    
        var crypto = require('crypto');
        var hash = crypto.createHash('md5');
    
        // 计算md5值
        var result = hash.update(buff).digest('hex');
    
        return result;  
    }
    
    var str1 = 'd131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70';
    var str2 = 'd131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70';
    
    var result1 = getHashResult(str1);
    var result2 = getHashResult(str2);
    
    if(result1 === result2) {
        console.log(`Got the same md5 result: ${result1}`);
    }else{
        console.log(`Not the same md5 result`);
    }

    写在后面

    如有错漏,敬请指出,欢迎多交流 :)

    相关链接

    MD5碰撞的一些例子
    http://www.jianshu.com/p/c9089fd5b1ba

    MD5 Collision Demo
    http://www.mscs.dal.ca/~selinger/md5collision/

    Free Password Hash Cracker
    https://crackstation.net/

    转载于:https://www.cnblogs.com/chyingp/p/nodejs-learning-crypto-md5.html

    展开全文
  • 理论上可以实现0误报,但是,在复杂场景下,会出现污点突变不准确,误报等情况,尤其是使用了自定义过滤函数 二, :rocket:火线〜洞态IAST极速体验 快速开始请查看 三,检测能力 命令执行 SQL注入,支持常见...
  • 密码技术和区块链

    千次阅读 2020-05-08 14:42:31
    文章目录密码学简介区块链架构设计区块链简介区块链架构(基于不同共识机制)哈希函数抵抗基于数据篡改攻击原像攻击第二原像攻击为什么电子签名使用哈希函数哈希函数应用区块链技术起源比特币架构区块链核心协议...

    密码学简介

    抗量子计算攻击的公钥密码的发展:

    • 高维格理论在密码学首次应用时公钥密码分析工具;此后格密码展现出高安全、高效、应用广的特点

    高维格的数学难题

    • 格苦难问题研究是抗量子计算公钥密码基础问题
      在这里插入图片描述

    密码网络安全协议:
    在这里插入图片描述

    区块链架构设计

    区块链简介

    区块链是一种变革性技术,不仅对链上承载的数据,也为群体工作模式带来了新思路

    在这里插入图片描述
    在这里插入图片描述

    区块链架构(基于不同的共识机制)

    在这里插入图片描述

    哈希函数抵抗基于数据篡改的攻击

    原像攻击

    攻击者找到假的消息M匹配合法的电子指纹Y,Y=H(M)
    在这里插入图片描述

    M是比特币:找一个M,对应有70个0。
    在这里插入图片描述
    比特币的挖矿复杂度2^70
    在这里插入图片描述
    https://www.blockchain.com/explorer
    在这里插入图片描述

    第二原像攻击

    • 攻击者找到假的消息M2替换合法消息M1,使得H(M1)=H(M2)
      在这里插入图片描述
    • 可以抵抗电子签名伪造等多种偷梁换柱攻击

    为什么电子签名使用哈希函数

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    哈希函数应用

    哈希函数用于多类信息系统:数字证书、电子支付、网络安全协议、数字货币、区块链、可证明安全密码系统、隐私保护等。
    在这里插入图片描述

    区块链技术起源

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    比特币架构

    “中本聪”与2009年提出去中心化的电子货币系统----比特币
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    区块链核心协议

    在这里插入图片描述

    基于不同共识协议的区块链架构

    在这里插入图片描述

    VRF构造方法

    在这里插入图片描述

    Libra共识

    在这里插入图片描述
    在这里插入图片描述

    Algorand共识

    在这里插入图片描述

    区块链架构总结

    在这里插入图片描述

    区块链架构扩展-跨链

    在这里插入图片描述

    区块链的隐私保护

    区块链隐私保护技术发展

    在这里插入图片描述

    零知识证明

    在这里插入图片描述

    交互式零知识证明

    在这里插入图片描述

    非交互式证明

    在这里插入图片描述

    隐私保护支撑点

    啊

    数字签名

    在这里插入图片描述

    可链接环签名

    在这里插入图片描述

    全同态加密

    在这里插入图片描述

    总结

    在这里插入图片描述

    区块链测评技术

    区块链安全问题

    在这里插入图片描述

    区块链测评

    在这里插入图片描述

    区块链系统测评

    在这里插入图片描述

    区块链硬件芯片测评

    在这里插入图片描述

    区块链软件测评

    在这里插入图片描述

    白盒密码测评

    在这里插入图片描述

    区块链模块测评-智能合约

    在这里插入图片描述

    区块链密码模块测评

    在这里插入图片描述

    小结

    在这里插入图片描述

    区块链产业发展及区属

    区块链平台(项目)

    在这里插入图片描述

    区块链应用开放平台

    在这里插入图片描述

    区块链+金融领域

    在这里插入图片描述

    区块链+工业互联网

    在这里插入图片描述

    区块链+医疗健康

    在这里插入图片描述

    国际区块链研究

    在这里插入图片描述

    区块链交叉创新平台总体思路

    在这里插入图片描述

    展开全文
  • (1).散列表(Hash table,也叫哈希表),是依据关键码值(Key value)而直接进行訪问的数据结构。...hash算法最重要的特点是不可逆和无冲突,在信息安全方面的应用如下几个方面: 1.文件校验 2.数字签...

    (1).散列表(Hash table,也叫哈希表),是依据关键码值(Key value)而直接进行訪问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来訪问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

    MD5和sha系列算法是应用最广泛的hash算法。hash算法最重要的特点是不可逆和无冲突,在信息安全方面的应用如下几个方面:

    1.文件校验

    2.数字签名

    3.鉴权协议

    Hash算法函数根据分类:加法hash、位运算hash、乘法hash、除法hash、查表hash等。

    (2).区块链中的hash算法

    Hash算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。利用其不可逆行可对明文进行加密,比特币中使用的hash算法位sha-256。

    应用:

    1.区块链中节点的地址,公钥,私钥计算。以地址为例:公钥经过一次SHA256计算,再进行一次RIPEMD160计算,得到一个公钥哈希(20字节\160比特),添加版本信息,再来两次SHA256运算、取前4比特字节,放到哈希公钥加版本信息后,再经过base58编码,最终得到地址。

    2.merkle tree:merkle tree上的叶节点存放hash计算后的hash值,非叶节点是其对应的子节点串联的字符串的hash值。用于区块头和SPV认证中。

    3.工作量证明pow:计算的其实就是一个nonce,当这个随机数和其他散列过的数据合并时,产生一个比规定目标小(target)值。挖矿也可以理解一种快速不可逆的计算。SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET。

    4.比特币中的bloom filter布隆过滤器,布隆过滤器基于hash函数的快速查找。解决了客户端检索的问题,原理是Bloom filter可以快速判断出某检索值一定不存在于某个指定的集合,从而可以过滤掉大量无关数据,减少客户端不必要的下载量。

    (3)Go语言支持

    go crypto标准包包含了一些常用的哈希算法,例如md5、sha1、sha256、sha512等。以sha1算法为例了解go如何生成哈希值。

    package main
    
    import (
        "crypto/sha1"
        "fmt"
        "io"
        "log"
        "os"
    )
    
    func main() {
        data := []byte("this is test, hello world, keep coding")
        fmt.Printf("%x \n", sha1.Sum(data))
    
        h := sha1.New()
        io.WriteString(h, "this is test, hello world, keep coding")
        fmt.Printf("%x \n", h.Sum(nil))
    
        fmt.Printf("%x \n", shaFile("./file.txt"))
    }
    
    //shaFile利用sha1算法将目标文件生成哈希值
    func shaFile(filePath string) []byte {
        f, err := os.Open("file.txt")
        if err != nil {
            log.Fatal(err)
        }
        defer f.Close()
    
        h := sha1.New()
        if _, err := io.Copy(h, f); err != nil {
            log.Fatal(err)
        }
        return h.Sum(nil)
    }
    •  

    程序运行结果为:

    a1 7b 4a 11 04 95 e1 c4 70 8f a0 33 db 89 d6 f6 13 3d 6a 48
    a1 7b 4a 11 04 95 e1 c4 70 8f a0 33 db 89 d6 f6 13 3d 6a 48
    ccf59c07592fb103ff88062c924962b6f9839a9b

     

     

     

     

    展开全文
  • 技术特点及优势: 1. 框架没有和实现混在一起. 我发这个里面实现只是一个例子. 让大家知道如何调用.. 2. 关于不好向PHP5移植, 我从没想过要移植到PHP5上. 因为如果要移值, 你敢说你框架不要改.. 恐怕要改...
  • 3、掌握哈希函数的概念、结构及应用,了解典型的哈希算法,掌握消息验证码概念,了解基于DES和Hash的消息认证码; (重点) 4、掌握公开密钥密码系统的特点及原理,掌握RSA的公钥密码算法,了解数字签名的特点和原理...

    参考博客:「信息安全技术」期末复习宝典 【整理完毕】计算机信息安全技术知识点简摘又名我的期末考试复习第一弹

    以朱建明的《信息安全导论》为例

    第四章 密码学

    一、学习目标

    1、掌握分组密码设计的一般原理,了解DES算法;(重点)

    2、掌握序列密码的基本原理,掌握线性反馈寄存器,掌握非线性序列的生成方法; (重点)

    3、掌握哈希函数的概念、结构及应用,了解典型的哈希算法,掌握消息验证码概念,了解基于DES和Hash的消息认证码; (重点)

    4、掌握公开密钥密码系统的特点及原理,掌握RSA的公钥密码算法,了解数字签名的特点和原理; (重点)

    5、理解并掌握密钥管理的层次结构,掌握密钥建立、协商的方法,了解PKI技术。 (重点)

    二、考试重点

    1、古典密码

    • 凯撒密码、棋盘密码、栅栏密码

    2、DES算法中唯一非线性部件:S盒

    3、计算:

    • 序列密码:线性反馈移位寄存器和非线性序列的生成方法的计算方法,参考P82-P83
    • RSA密码:加解密计算,参考P86

    4、哈希函数的单向性和抗碰撞性

    5、描述密钥管理的层次结构,参考P98

    6、公钥基础设施PKI包括的内容,参考P103

    7、分组密码的工作模式:ECB、CBC、OFB、CFB四种

    第五章 操作系统安全

    一、学习目标

    1、了解操作系统安全的发展历史;

    2、掌握安全操作系统的安全策略与模型; (重点)

    3、掌握安全操作系统的访问控制机制; (重点)

    4、了解安全操作系统的评测方法与准则。

    二、考试重点

    1、安全模型:

    BLP机密性安全模型BIBA完整性安全模型 简述以及两者之间的异同。参考P116

    2、7个安全级别:

    A类,B类,C类,D类各个级别适用的场景。参考P131

    第七章 网络安全

    一、学习目标

    1、了解网络所面临的安全威胁;

    2、了解防止网络攻击的控制措施;

    3、掌握防火墙的体系结构、类型、能力和限制,掌握防火墙的基本工作原理; (重点)

    4、了解入侵检测系统的功能和类型;

    5、掌握虚拟专用网VPN的类型和协议; (重点)

    6、了解移动通信网络安全和无线局域网安全。

    二、考试重点

    1、拒绝服务攻击和分布式拒绝服务的异同、概念。

    2、防火墙的配置设计题。

    3、入侵检测系统IDS的分类等问题(基于主机的IDS、基于网络的IDS)。

    4、VPN技术

    隧道技术和密码技术。

    5、VPN协议

    类型 TCP/IP参考模型 协议
    第二层VPN技术 数据链路层 点对点隧道协议PPTP、第二层隧道协议L2TP
    第三层VPN技术 网络层 IPSec协议、多协议标签交换MPLS、RGE
    / 传输层 SSL协议

    简述PPTP和L2TP的异同。

    第九章 软件安全与恶意代码

    一、学习目标

    1、了解软件安全的概念以及当前软件安全威胁的主要来源;

    2、掌握软件安全风险分析的过程,特别是微软STRIDE威胁建模方法; (重点)

    3、了解安全软件开发生命周期的构成方式以及主要步骤;

    4、理解并掌握恶意软件的定义,特别是病毒,蠕虫和木马三者的区别、机理与防治技术。 (重点)

    二、考试重点

    1、STRIDE威胁:常见威胁及其对应的安全属性

    威胁 安全性属性
    假冒 身份验证
    篡改 完整性
    可抵赖 不可否认
    信息泄露 机密性
    拒绝服务 可用性
    提升权限 授权

    2、威胁建模的过程

    • 发现已知的对系统的威胁
    • 将威胁以风险从高到低pail
    • 确定减少威胁的技术
    • 选择合适的技术

    3、安全软件开发生命周期

    • 安全原则、规则及规章
    • 安全需求工程
    • 架构和设计评审、威胁建模
    • 软件安全编码
    • 软件安全测试

    区别于 传统软件开发生命周期。

    4、病毒、木马、蠕虫三者之间的区别。

    展开全文
  • 布隆过滤器浅析

    2020-10-23 09:58:05
    布隆过滤器原理及特点哈希函数与布隆过滤器长度计算公式原理优缺点应用场景爬虫去重反垃圾邮件Redis缓存击穿训练过程训练过程流程图过滤过程过滤流程图性能分析分析方法分析结果可视化结果小感悟日期:2020-10-23 ...
  • 散列表和树快速入门

    2020-05-04 17:30:54
    散列函数2.1散列函数的要求及特点2.2散列函数的设计方法2.2.1直接寻址法:2.2.2除留余数法2.2.3平方取中法2.2.4折叠法2.3散列冲突3.散列冲突的解决方案3.1开放寻址法3.1.1线性检测 :3.1.2二次检测3.1.3双重散列3.2...
  • 8.3 函数的参数和函数的值 100 8.3.1 形式参数和实际参数 101 8.3.2 函数的返回值 102 8.4 函数的调用 106 8.4.1 函数调用的一般形式 106 8.4.2 函数调用的方式 106 8.4.3 被调用函数的声明和函数原型 107 8.5 函数...
  • 8.3 函数的参数和函数的值 100 8.3.1 形式参数和实际参数 101 8.3.2 函数的返回值 102 8.4 函数的调用 106 8.4.1 函数调用的一般形式 106 8.4.2 函数调用的方式 106 8.4.3 被调用函数的声明和函数原型 107 8.5 函数...
  • 8.4.2 构造哈希函数的常用方法 8.4.3 解决冲突的主要方法 8.5 哈希表算法实现C语言源程序 习题八 第9章 排序 9.1 排序基本概念 9.2 插入排序 9.2.1 直接插入排序 9.2.2 折半插入排序 9.2.3 希尔排序 9.3 ...
  • 数据结构PPT文件

    2020-04-23 11:01:22
    大连东软信息学院学习平台数据结构PPT文件,已打包,有需要的的话可以直接下载。...29哈希概念函数及冲突.pptx 30哈希的应用.pptx 31八数码问题启发式搜索与A-star算法.pptx 32迭代加深A-star算法.pptx
  • 孙方成 -《偶图算法及应用》 孙林春 -《让我们做得更好——从《Parity》解法谈程序优化》 王知昆 -《搜索顺序选择》 许智磊 -《二分,再二分!――从Mobiles(IOI 2001)一题看多重二分》 杨旻旻 -《构造...
  • **毛杰明 -《母函数的性质及应用》** 董华星 -《浅析字母树在信息学竞赛中的应用》 梅诗珂 -《信息学竞赛中概率问题求解初探》 高逸涵 -《数位计数问题解法研究》 周而进 -《浅谈估价函数在信息学竞赛中的应用》...
  • 嵌入式Linux C编程入门(第2版) PPT

    热门讨论 2011-03-11 20:48:34
    1.1.3 嵌入式系统的特点 4 1.2 嵌入式系统的组成 5 1.2.1 嵌入式系统的硬件架构 6 1.2.2 嵌入式操作系统 9 1.2.3 嵌入式应用软件 11 1.3 arm处理器平台介绍 12 1.3.1 arm处理器简介 12 1.3.2 ...
  • Python核心编程第二版(中文)

    热门讨论 2015-04-23 16:40:13
    10.3.7 在应用使用我们封装的函数 10.3.8 else子句 10.3.9 finally子句 10.3.10 try-finally语句 10.3.11 try-except-else-finally:厨房一锅端 10.4 上下文管理 10.4.1 with语句 10.4.2 *上下文管理协议 ...
  • 深入理解Python中文版高清PDF

    热门讨论 2012-09-04 19:37:04
     10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理   10.4.1 with...
  • Python核心编程(中文第二版)

    热门讨论 2009-10-02 12:08:14
     10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理   10.4.1 with语句  ...
  • Python核心编程第二版(ok)

    热门讨论 2009-05-21 08:23:44
     10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  cccc10.4 上下文管理   10.4.1 with...
  •  10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理   10.4.1 with语句  ...
  • Python核心编程第二版

    热门讨论 2009-07-30 17:07:20
     10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理   10.4.1 with语句  ...
  •  10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理   10.4.1 with语句  ...
  • Linux内核源码+电子书

    热门讨论 2011-02-21 15:13:10
    12.4.1 套接字缓冲区的特点 12.4.2 套接字缓冲区操作基本原理 12.4.3 sk_buff数据结构的核心内容 12.4.4 套接字缓冲区提供的函数 12.4.5 套接字缓冲区的上层支持例程 12.5 网络设备接口 12.5.1 基本结构 ...
  • 12.4.1 套接字缓冲区的特点 12.4.2 套接字缓冲区操作基本原理 12.4.3 sk_buff数据结构的核心内容 12.4.4 套接字缓冲区提供的函数 12.4.5 套接字缓冲区的上层支持例程 12.5 网络设备接口 12.5.1 基本结构 ...
  • 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 2.3.7布尔型数据32 2.3.8变量赋初值33 ...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

哈希函数的特点及应用