自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (26)
  • 问答 (1)
  • 收藏
  • 关注

转载 SHA1算法实现及详解

1 SHA1算法简介安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程

2013-08-30 00:44:55 1147

转载 Rijndael加密算法的介绍

本文针对Rijndael加密算法的数学理论背景,算法的架构,回合的转换,金钥的产生,以及各种攻击破密法等等,做了一些简单的介绍。一、简介在AES ( Advanced Encryption Standard ) 的选拔中,从最初的十五个算法,到十个、五个,逐步筛选出适合用来作为下一代加密算法的标准。Rijndael在经过了一番时日的考验之后,也一直名列前矛。直至十月二日,Rijnd

2013-08-30 00:41:50 2179

原创 PBKDF2算法

美国国家标准与技术研究院推荐。可以通过调整key来扩展,从而避免暴力破解。通过key扩展的基本思路是,在将密码哈希后,再使用key加上哈希值再使用相同的算法进行多次的哈希。如果黑客尝试去破解的话,他会因此多花费几十亿次计算的时间。前面提到过,越慢越好,PBKDF2可以通过指定迭代次数,你想让他多慢,他就有多慢。通过加盐的方式预防彩虹表的破解方式。盐是一个添加到用户的密码哈希过程中的一段随机序列。这

2013-08-30 00:31:31 5934

原创 密码知识简介

2.1.1专业术语发送者和接收者假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。2.1.2消息和加密消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。图1.1表明了这个过程。(如果你遵循ISO 7498-2标准,那就用到术语“译成密码(encipher)

2013-08-30 00:25:23 2024

转载 如何安全的存储密码

过去一段时间来, 众多的网站遭遇用户密码数据库泄露事件, 这甚至包括顶级的互联网企业–NASDQ上市的商务社交网络Linkedin, 国内诸如CSDN一类的就更多了。层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。那么在选择密码存储方案时, 容易掉入哪些陷阱, 以及如何避免这些陷阱? 坚果云,作为一个用于同步、备份文件

2013-08-30 00:21:03 839

原创 密码学基础

1 加密技术概述  一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。  对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。  但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上

2013-08-30 00:15:41 1089

转载 AES加密算法(C++实现,附源码)

先搞定AES算法,基本变换包括SubBytes(字节替代)、ShiftRows(行移位)、MixColumns(列混淆)、AddRoundKey(轮密钥加)其算法一般描述为明文及密钥的组织排列方式 ByteSubstitution(字节替代)非线性的字节替代,单独处理每个字节:求该字节在有限域GF(28)上的乘法逆,"0"被映射为自身

2013-08-30 00:13:56 2210

转载 关于CLucene的一些的资料

1.CLucene在Sourceforge上的主页:http://clucene.wiki.sourceforge.net/2.CLucene API文档地址:http://clucene.sourceforge.net/doc/html/index.html3.CLucene源代码SVN地址:https://clucene.svn.sourceforge.net/svnroot/cluc

2013-08-28 23:55:53 823

转载 设计模式在C语言中的应用--读nginx源码

市面上的“设计模式“书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了。是这样吗?设计模式的概念是从建筑领域引入的,本身从没歧视过面向过程编程语言,它只是对一类问题的普遍解决方案而已。面向对象语言因为有类、多态等特点,使得开发者们容易达到:隐藏细节、封装变化,而这与设计模式的目的比较一致,所以大师们爱把设计模式

2013-08-28 23:42:58 753

原创 高性能网络编程3----TCP消息的接收

转自:http://blog.csdn.net/russell_tao/article/details/9950615这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞

2013-08-27 23:49:49 848

原创 高性能网络编程2----TCP消息的发送

转自:http://blog.csdn.net/russell_tao/article/details/9370109在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送

2013-08-27 23:47:41 621

原创 高性能网络编程(一)----accept建立连接

转自:http://blog.csdn.net/russell_tao/article/details/9111769最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目

2013-08-27 23:46:00 772

转载 linux上的一些系统监测工具简介

在linux中提供了很多有用的工具,以方便开发人员调试和评测服务器程序。下面介绍几个常用的工具:tcpdump,nc,strace,lfos,netstat,vmstat,ifstat和mpstat。1. tcpdump    tcpdump是一个网络抓包工具,它提供了大量的选项,用以过滤数据包或者定制输出格式。具体见:http://www.cnblogs.co

2013-08-27 23:41:04 758

转载 gdb调试多进程程序和多线程程序

平时一般用gdb直接调试短小的程序,好像我还没调试过多进程和多线程程序呢。 1. gdb调试多进程程序    如果一个进程通过fork系统调用创建了子进程,gdb会继续调试原来的进程,子进程则正常运行。常用的有两种方法调试子进程。    第一种:单独调试子进程    子进程在本质上也是一个进程,因此我们可以用gdb调试方法来调试。举个例子,运行程序,通过ps -ef

2013-08-27 23:40:02 675

原创 多线程中递归锁的实现

转自:http://blog.csdn.net/wtz1985/article/details/3016375在上一篇文章中,我已经阐述了多线程中简单锁的实现,可在结束的时候,我就提了那么一个问题,那就是如果在一个链表中进行插入时,要进行查询的操作,如果只是简单的锁,是没法实现的。所以“递归锁”就浮现于世了。可能有些人看到递归这两个字,有点傻了眼,其实也没什么的,简单的介绍,就

2013-08-25 15:26:55 1271

原创 多线程中锁的实现

转自:http://blog.csdn.net/wtz1985/article/details/3015376所谓"锁",就是为了让自己独自占有空间,在自己没用完之前,不让别人来占用自己的资源.现在的操作系统,无论是WINDOWS,还是UNIX等其他操作系统.都采用多线程的环境.这极大提高了任务的执行速度,而且不会影响其他事务的执行.但是它们的执行是靠时间片的轮转的,如果某一个线程没有

2013-08-25 15:25:36 794

原创 条件预处理

预处理功能是C语言特有的功能,它是在对源程序正是编译前由预编译程序进行编译的。我们在写代码的时候可以通过预处理命令来调用预处理功能。在C语言程序中,在每个文件的开头都包含于“#”,这就是预处理的标志。所谓预处理就是在进行编译的第一遍之前(词法扫描和语法分析)所作的工作。当对一个源程序进行编译的时候,系统会自动条用预处理程序对源程序中的部分预处理进行处理,处理完毕后才进行源程序进行编译。

2013-08-25 15:23:53 1275

原创 makefile的写法

makefile是一种描述依赖关系的文件, 它主要描述的是整个工程编译规则, 同时也给工程的维护提供很大的方便. 这在大型工程中非常实用. 在写好makefile之后, 只需要在命令行输入make命令, 工程就按照既定的makefile规则进行"自动化编译".1. 编译(compile)和链接(link):我们通常所说的编译一般来说指的是编译和链接这两个过程的总称.不管是什

2013-08-25 15:23:08 609

原创 Linux socket编程(字节处理)

1、 引言Linux的兴起可以说是Internet创造的一个奇迹。Linux作为一个完全开放其原代码的免费的自由软件,兼容了各种UNIX标准(如POSIX、UNIX System V 和 BSD UNIX 等)的多用户、多任务的具有复杂内核的操作系统。在中国,随着Internet的普及,一批主要以高等院校的学生和ISP的技术人员组成的Linux爱好者队伍已经蓬勃成长起来。越来越多的编程爱好者也

2013-08-23 22:42:11 900

原创 linux下socket编程(基础参考)

什么是Socket   Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。   Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是

2013-08-23 22:40:35 615

原创 多线程和多进程的区别(小结)

转自:http://blog.csdn.net/hairetz/article/details/4281931#comments一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。我想,只要你不是整天都写那种int main()到底的代码的人,那么或多或少你会遇到代码响应不够用

2013-08-23 22:21:12 1732

原创 RK算法分析

这一节介绍一下由Rabin和Karp提出的RK算法。1,RK算法的基本思想 HASH! 如果两个字符串hash后的值不相同,则它们肯定不相同;如果它们hash后的值相同,它们不一定相同。 RK算法的基本思想就是:将模式串P的hash值跟主串S中的每一个长度为|P|的子串的hash值比较。如果不同,则它们肯定不相等;如果相同,则再诸位比较之。

2013-08-23 22:16:25 6452 3

原创 Sunday算法

假设我们有如下字符串:A = "LESSONS TEARNED IN SOFTWARE TE";B = "SOFTWARE";Sunday算法的大致原理是:先从左到右逐个字符比较,以我们的字符串为例:开始的时候,我们让i = 0, 指向A的第一个字符; j = 0 指向B的第一个字符,分别为"L"和"S",不等;这个时候,Sunday算法要求,找到位于A字串

2013-08-23 22:11:33 715

原创 Boyer-Moore算法学习

转自:http://blog.csdn.net/sealyao/article/details/45681671、概述在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前相当有效又容易理解的一种,一般情况下,比KMP算法快3-5倍。BM算法在移动模式串的时候是从左到右,而进行比较的时候是从右到左的。常规的匹配算法移动模式串的时候是从左到右,

2013-08-23 22:00:28 681

翻译 从C/C++到Python(之二)(By Robinvane Suen)

3. 类型与操作符Python与C/C++不一样,它不是一个强类型的语言。所以,在使用一个变量之前,我们无需声明它的类型 — Python会自动帮我们辨别变量的类型。更重要区别是,变量可以指向任意类型(如果用C#的语言来说,所有变量的类型都是Object,所以它拥有任意指向的能力[java语言没有自动装箱功能,所以有点不一样])。看看下面的例子:C/C++语言:double

2013-08-22 23:38:01 892

翻译 从C/C++到Python(之一)(By Robinvane Suen)

0. 前言这两天放暑假在家,闲来没事,倍觉无聊,于是把借来3个月但还没怎么看的《Python语言入门》大致看了一遍,随便改写了一部分原有的程序作为练习。作为一门解析性脚本语言,我感觉Python与类C/C++语言有许多不一样的做法,特此记录。由于本人使用Python的时间只有3天,对Python语言的理解未见深刻,若有错误,欢迎指出。0.0. 适用读者我认为了解一门新的语言

2013-08-22 23:36:33 1433

原创 Horspool字符串匹配算法

Horspool是后缀搜索,也就是搜索已读入文本中是否含有模式串的后缀;如果有,是多长,显然,当后缀长度等于模式串的长度时,我们就找到了一个匹配。Horspool算法认为:对于每个文本搜索窗口,将窗口内的最后一个字符(C)与模式串的最后一个字符进行比较。如果相等,则继续从后向前验证其他字符,直到完全相等或者某个字符不匹配。然后,无论匹配与否,都将根据在模式串的下一个出现位置将窗口向右移动。

2013-08-22 23:26:28 980

原创 字符串匹配算法总结(转)

KMP虽然经典,但是理解起来极其复杂,好不容易理解好了,便起码来巨麻烦!老子就是今天图书馆在写了几个小时才勉强写了一个有bug的、效率不高的KMP,特别是计算next数组的部分。其实,比KMP算法速度快的算法大把大把,而且理解起来更简单,为何非要抓住KMP呢?笔试出现字符串模式匹配时直接上sunday算法,既简单又高效,何乐而不为?说实话,想到sunday算法的那个人,绝对是发散思

2013-08-22 23:24:50 849

原创 linux下静态库与动态库的生成与调用

转自:http://blog.csdn.net/nicebooks/article/details/6179286 首先,这里有2个概念:静态库,动态库.静态库:      是程序在链接时将静态库拷贝到可执行文件里,即生成可执行文件后,即使删除静态库,可执行文件仍可正常执行。动态库:      也叫共享库,程序只是在链接时在可执行文件时保存了该库的信息,

2013-08-21 23:56:09 669

翻译 位运算艺术(一)

本文是针对使用位运算来实现一些方法,我们都知道位运算的代价比其他符号运算都低,所以当一个方法只使用位运算且运算次数与其他不纯使用位运算的方法相等时,所用的时间肯定是最短的,甚至即使运算次数比其他 方法多,也是有可能花的时间短的。这里计算算法的衡量标准是位运算的运算此时,任何C的位运算符当作一次运算,不写到RAM的中间赋值不算运算,当然这里假设每次运算代价都是近似相同的机器指令和CPU时间。当然

2013-08-21 23:54:13 869

原创 Linux 内存使用方法详细解析

转自:http://blog.jobbole.com/45748/一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。这里要提到一个

2013-08-21 23:41:46 578

原创 关系数据库的特点

数据库管理系统将具有一定结构的数据组成一个集合,它主要具有以下几个特点:1. 数据的结构化 数据库中的数据并不是杂乱无章、毫不相干的,它们具有一定的组织结构,属于同一集合的数据具有相似的特征。2. 数据的共享性 在一个单位的各个部门之间,存在着大量的重复信息。使用数据库的目的就是要统一管理这些信息,减少冗余度,使各个部门共同享有相同的数据。3. 数据的独立性 数据的独立性是指数据记

2013-08-21 23:30:03 1320

原创 随机生成100万个数,排序后保存在文件中

转自:http://blog.csdn.net/hackbuteer1/article/details/6574908随机生成100万个数,存储在文件out1.txt中,使用内部排序完成,并重新储存在文件out2.txt中。(一)使用STL中的qsort函数进行操作:[cpp] view plaincopy#include

2013-08-20 22:22:25 1826

原创 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结

一、快速排序的基本思想     设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:①分解:      在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记

2013-08-20 22:19:23 700

原创 用C++设计一个不能被继承的类

在C#中定义了关键字sealed,被sealed修饰的类不能被继承。在Java中同样也有关键字final表示一个类型不能被继承。在C++中没有类似于sealed和final的关键字,所以我们只有自己来实现。      很多人都能够想到,类的构造函数和析构函数是关键。因为子类的构造函数会自动调用父类的构造函数。子类的析构函数也会自动调用父类的析构函数。所以要想使一个类不能被继承,只有把它的构造函

2013-08-18 23:10:55 644

原创 拷贝构造函数的参数类型必须是引用

在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不过还好,我思索一下以后,发现这个答案是不对的。原因:       如果拷贝构造函数中的参数不是一个引用,即形如CCla

2013-08-18 23:09:20 620

原创 构造函数的初始化列表

首先,运行下图中的C++代码,输出是什么?[cpp] view plaincopyclass A  {  private:      int n1;      int n2;  public:      A(): n2(0) , n1(n2 + 2)      {      }      void Print(

2013-08-18 23:08:23 614

原创 线性时间复杂度求数组中第K大数

求数组中第K大的数可以基于快排序思想,步骤如下:      1、随机选择一个支点      2、将比支点大的数,放到数组左边;将比支点小的数放到数组右边;将支点放到中间(属于左部分)      3、设左部分的长度为L,              当K               当K > L时,递归地在有部分中找第(K - L)大的数        

2013-08-18 23:06:05 901

原创 atoi() 与 itoa()函数的内部实现

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子:       atoi     把字符串转换成整型数       itoa     把一整数转换为字符串 [cpp] view plaincopy#include "stdio.h"  #

2013-08-18 23:04:52 648

转载 程序在内存中的分布

在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。从低地址到高地址,可分为下面几段: 预留内存地址(操作系统维护的内存地址,不可访问) 程序代码区(只读,存代码和一

2013-08-18 23:02:04 539

毕业答辩ppt模板(答辩必备,效果很炫)

毕业答辩ppt模板,答辩必备,效果很炫,给人耳目一新的感觉。

2011-06-12

流程图生成软件(适合初学者学习流程图)

流程图生成软件(适合初学者学习流程图),非常实用,简单

2011-05-28

二进制编辑器(查看.exe文件的内存中的具体二进制存储)

二进制编辑器,用于查看.exe文件的内存中的具体二进制存储。

2011-05-28

.dll文件查看器,直接阅读dll文件

.dll文件查看器,可直接阅读dll文件,非常实用的工具软件

2011-05-27

ACM题解,著名院校oj解题代码

ACM题解,著名院校oj解题代码,对ACmer非常有用

2011-05-27

数据结构代码(严蔚敏版C实现)

数据结构代码,用于深入理解数据结构和算法

2011-05-27

经典数学函数程序(C语言实现)

经典数学函数程序,可用于相关的数学方面的研究

2011-05-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除