每一个可以努力的日子,都是一份厚礼。
2011年1 月
反向索引Inverted Index – Map Reduce Program
2011 1 月 4th
Inverted Index (反向索引)是搜索引擎需要做的一件经常性工作。在Google提出Map Reduce分布式编程框架中,这是一件很容易完成的事情。下面就是一个python写的示例。 更多 >
单词统计Word Count – Map Reduce Program
2011 1 月 4th
在学习Map Reduce方法时,Word Count(单词统计)程序是最基础的入门训练。不同的写法会有不同的执行效率,下面是用python写的一个示例。 更多 >
Amazon EMR 云计算服务编程实践
2011 1 月 4th
EMR是Amazon亚马逊云计算平台提供的一项服务,用户可以在此平台使用亚马逊强大的计算资源执行Map Reduce程序。由于Map Reduce很多情况下都是做的海量数据文本统计类的并行计算任务,需要耗费很多时间,使用云计算则可以大大加快执行速度。
EMR建立在Amazon S3和Amazon EC2的基础上。用户提交一个map程序和一个reduce程序,同时提交需要处理的数据文件作为输入。这些都上传到Amazon S3云端存储平台,在EMR中指定相应的S3路径,就可以开始做数据处理了。EMR会根据用户指定的规模配置,开启一个EC2集群,在每个节点上运行Hadoop。运行结束后用户可以从S3获取结果数据。下面以word count单词统计任务为例,介绍具体操作过程。 更多 >
Amazon S3 云存储服务Cloud Storage编程实践
2011 1 月 4th
Amazon Simple Storage Service (S3) 是一个云端存储平台,这是现在蓬勃发展的云计算的典型应用之一。用户可以将自己的数据上传到云端服务器,便可以随时随地地访问到这些数据,灵活高效。它按需收费,也就是说使用相应容量的存储空间,就花相应的钱。这里有具体的资费标准。对于企业用户来说,使用这项服务实际上可以大大降低成本,这些成本不仅仅包括自己购置服务器硬件、软件成本,还包括电力、为IT设施维护而雇佣的人力成本等等。
在Amazon S3中有如下几个概念,通过分别介绍,我们可以大致理解云存储的基本原理。
Buckets:一个bucket是一个用于存储的容器,我们可以不太恰当地理解为就是云端的文件夹。文件夹要求一个独特唯一的名字,这和注册邮箱名差不多,可以加前缀或者后缀来避免重名。bucket使得我们在一个高层级上组织命名空间,并在数据的访问控制上扮演重要角色。下面举个例子,假设一个名为photos/puppy.jpg的文件对象存储在名为johnsmith的bucket里,那么我们就可以通过这样一个url访问到这个对象:http://johnsmith.s3.amazonaws.com/photos/puppy.jpg
更多 >
RSA读取密钥——使用openssl编程
2011 1 月 4th
RSA是基于数论中大素数的乘积难分解理论上的非对称加密法。在此密码术中,使用公钥(public key)和私钥(private key)两个不同的密钥:公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。
举例:小红希望安全地发送一条消息给小明,消息明文为m,小明的公钥为K+,小明的私钥为K-。通信过程为,小红使用K+加密m,成为密文K+(m),传送给小明,小明收到后使用K-解密这个密文得到原始消息明文,即m = K-(K+(m))。
具体的密钥生成算法如下。随机选择两个大素数p和q(比如每个都是1024 bit),计算n = pq, n’ = (p-1)(q-1). 选择一个e (e小于n) 与n’互质。计算d使得ed = 1 mod n’.则公钥为(n, e),私钥为(n, d). 注意p和q都应该保密。
加密过程为c = m^e mod n
解密过程为m = c^d mod n
以上为原理简介。下面是openssl API编程应用读取密钥文件的示例源代码: 更多 >
DSA签名与验证——使用openssl编程
2011 1 月 4th
和手写签名一样,数字签名可以为我们验证文档的作者、签名的时间,从而鉴明消息的内容是真实可靠的。它的目的和MAC类似,只是使用的是公钥加密体系。
和RSA加密解密过程相反,在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。这个方法完全可以基于RSA来实现,但是在DSA中,我们会更有效率地做这件事情。 更多 >
MD5哈希散列生成摘要——使用openssl编程
2011 1 月 3rd
取任意长度的消息,生成一个固定长度的散列值,或者叫做摘要。哈希函数的实现都是公开的,它广泛应用于文件完整性检测、数字签名中。登录密码也有用到哈希函数,一般网站在数据库中不是直接存储的用户密码,而是密码的哈希值,这样即使数据库暴露,攻击者仍然是不知道密码的明文的。
这要求Hash函数拥有以下特性:一是单向性,即不可逆性,我们无法从哈希值反过来得到原文。二是冲突碰撞抵御能力,即找到两个不同的消息原文,他们的哈希值相同,这在计算上不可行。
实际上,MD5已经不再安全。在2005年,我国山东大学王小云教授成功破解MD5算法,使得使用普通电脑在数小时内即可找到哈希碰撞,这在国际密码学领域引发地震。 更多 >
Diffie-Hellman密钥交换——使用openssl编程
2011 1 月 3rd
DH密钥交换算法,是第一个提出的公开密钥算法,它比RSA还要早提出。它使得在公开的不可信信道安全地交换密钥成为可能。但DH算法无法抵御中间人攻击,必须借用数字签名才足够安全。
下面是使用openssl进行DH密钥交换的示例程序: 更多 >
AES加密和解密——使用openssl编程
2011 1 月 3rd
AES是一套对称密钥的密码术,目前已广泛使用,用于替代已经不够安全的DES算法。所谓对称密钥,就是说加密和解密用的是同一个密钥,消息的发送方和接收方在消息传递前需要享有这个密钥。和非对称密钥体系不同,这里的密钥是双方保密的,不会让任何第三方知道。
对称密钥加密法主要基于块加密,选取固定长度的密钥,去加密明文中固定长度的块,生成的密文块与明文块长度一样。显然密钥长度十分重要,块的长度也很重要。如果太短,则很容易枚举出所有的明文-密文映射;如果太长,性能则会急剧下降。AES中规定块长度为128 bit,而密钥长度可以选择128, 192或256 bit 。暴力破解密钥需要万亿年,这保证了AES的安全性。
AES的算法较为复杂,在此不细加阐述。下面是使用openssl进行AES加密和解密的示例程序: 更多 >
