自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

愷风(Wei)的专栏

使用工具、了解工具、创造工具……

  • 博客(1074)
  • 资源 (25)
  • 收藏
  • 关注

原创 Java for Web学习笔记(一二三):搜索(5)MySQL全文索引(下)

小例子我们在表格Ticket和TicketComment中加入了fulltext key。小例子在Ticket的Subject或Body,以及在TicketComment的Body检索内容,按分页方式显示出来,同时显示关联分数,并按关联分数降序排列。 -- Ticket中队Subject和Body这两列进行全文检索 FULLTEXT KEY `Ticket_Search` (`Subject`,...

2018-05-24 17:22:37 924

原创 Java for Web学习笔记(一二二):搜索(4)MySQL全文索引(上)

全文索引全文索引存储在索引数据中的词频和所在记录,频率越高,权重越低,用过一定的算个给出相关性评分(relevance score)。MySQL的MyISAM和InnoDB支持全文检索,但要注意: InnoDB在版本5.6.4才开始提供全文索引 虽然语法一样,但MyISAM和InnoDB在实现和算法是不同的,它们之间的相关性评分是不具备可比性,即不要用一个InnoDB表的相关度值和一个MyIASM...

2018-05-24 16:28:33 825

原创 Java for Web学习笔记(一二一):搜索(3)JPA的动态条件搜索(下)

例子的具体实现仓库的实现使用spring data,增加自定义接口SearchableRepository,具体如下:public interface PersonRepository extends CrudRepository<Person, Long>, SearchableRepository<Person>{}public class PersonReposit...

2018-04-15 20:53:27 797

原创 Java for Web学习笔记(一二零):搜索(2)JPA的动态条件搜索(中)

通用的检索定义可以获得Predicate[]的SearchCriteriaSearchCriteria: 单个条件Criterion的集合SearchCriteria是单个条件Criterion的集合List<Criterion>/*代码很简单,也很有趣。由于List<T>是一个接口,必须有具体的实现,例子采用了ArrayList<T>,但我们希望只开放List...

2018-04-15 20:50:09 1010

原创 Java for Web学习笔记(一一九):搜索(1)JPA的动态条件搜索(上)

关于搜索数据库中的index需要平衡考虑: 索引会使查询更快 索引会使持续化更慢这需要我们具体个例具体衡量。 一般来讲95%的请求都应还有index,多个条件的请求,必须有一个带有index。 LIKE的比对中不应将通配符方在前面,这会引发全局扫描,如果非要这样,应必须带有其他index的条件。 OR的效率没有AND的高 待用index的条件应该放置在前面 唯一约束提供检索效率,UNIQUE KE...

2018-04-14 22:02:46 528

原创 Java for Web学习笔记(一一八):【篇外】Soap client

使用Eclipse自动生成Soap Client的代码在项目按右键,选择New -> Other ->Web Services -> Web Service Client,进入向导。加入自有代码,例如加入Envelope Header在xxxxStub.java文件相应的方法中加入:public com.example.api.ApiStatus.EchoResponse ech...

2018-04-11 21:33:30 4551 1

原创 Java for Web学习笔记(一一七):Spring Data(5)分页例子(下)

jsp代码下面是代码的片段,导读如下: 显示页序号:comments.totalPages是总页数,链接格式为/ticket/view/${ticket.id}?paging.page=xxx&paging.size=xxxx,paging.page和paging.size或转换为controller方法中的Pageable参数,如果没有采用缺省的 显示该页内容,存放在comments.c...

2018-03-11 12:45:14 492

原创 Java for Web学习笔记(一一六):Spring Data(4)分页例子(上)

例子说明在例子中,我们将学习如何分页显示用户的评论。加入spring data引入jar包加入spring data在pom中引入<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId>...

2018-03-11 12:42:36 842

原创 Java for Web学习笔记(一一五):Spring Data(3)配置

使用XML来配置之前为了让代码跑起来,我们已经通过Java代码对Spring Data进行了配置。再此,我们将进一步学习,包括XML方式。XML配置涉及两个namespace: Spring Data Commons,http://www.springframework.org/schema/data/repository,下面案例中前缀采用data Spring Data JPA(对Common...

2018-03-11 12:28:51 942

原创 Java for Web学习笔记(一一四):Spring Data(2)仓库接口

查询方法CrudRepository中只定义了通过主键查询的方式,这显然不能满足需求。Spring提供了查询方法来解决这样问题。查询方法包括: find...By get...By read...By将返回单个结果T,或者多个结果Iterable<T>, List<T>, Collection<T>,Page<T>。下面是例子:public inte...

2018-03-11 12:15:56 613

原创 Java for Web学习笔记(一一三):Spring Data(1)何为Spring Data

CRUD并不足够在之前学习中,使用了通用仓库接口GenericRepository,并通过GenericBaseRepository,GenericJpaRepository来具体实现,实现上对于CRUD而言,这类的实现大同小异,此外,我们还需要根据UNIQUE KEY或者KEY去进行查询,而不仅仅使用primary key,还有根据多个条件去进行查询或者检索,对返回的结果进行分页等等。Gener...

2018-03-11 12:09:34 427

原创 Java for Web学习笔记(一一二):再谈Entity映射(5)原生SQL和isolation

缘由我们在动态表格中使用了原生SQL,而在之前,我们讨论了非原生(Entity可以和表格明确对应),在两个事务同时写操作某个数据时,在isolation = Isolation.REPEATABLE_READ时,出现脏读情况是会报告org.springframework.dao.DataIntegrityViolationException的异常。但是原生的情况会有不同。小例子在事务中依次处理: ...

2018-03-02 12:08:43 905

原创 Java for Web学习笔记(一一一):再谈Entity映射(4)动态表格创建

如果这个不确定表格也需要我们的war来创建,如何实现。create table的原生SQL,entityManager是无法执行的,因为这不是可以回滚的事务。这种情况,我们需要: 捕获表格不存在的异常 从原始的Connection中实现表格创建。获取Connection能否从EntityManage中获取Connection依赖于JPA的具体实现,Eclipse的是支持,但是Hibernate不支...

2018-02-24 08:59:17 998

原创 Java for Web学习笔记(一一零):再谈Entity映射(3)动态表格

在某些场景中,需要使用动态表格,例如表格名字为abc_f(x),其中f(x)为变化后缀,可能是基于时间,也可能是基于用户名,基于ip地址或者别的什么计算出来的。小例子准备表为Event_<年>,data里面存放一个json的复杂结构List<String>,而这种复杂结构将对代码产生影响,后面详细讨论。CREATE TABLE `Event_2018` ( `id` b...

2018-02-24 08:49:46 789

原创 Java for Web学习笔记(一零九):再谈Entity映射(2)Entity的继承

我们先讨论一种简单的情况,多个已知的table具有相同的schema,能否映射到同一个Entity中。然后在下一学习讨论一种复杂的情况,我们在运行中可能会动态建立表格,这些表格具有相同的schema,如果使用JPA?假设test_a,test_b和test_c表格具有相同的表格结构,即schema相同,我们不能将其映射到同一个entity中,因为每个entity类都和一个table具体映射。如果我...

2018-02-24 08:39:27 1006

原创 Java for Web学习笔记(一零八):再谈Entity映射(1)数据转换

timestamp或datetime的匹配存放毫秒在数据库中缺省的精度为秒,如果需要存放毫秒甚至更好,可以如下:CREATE TABLE Ticket ( TicketId BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId BIGINT UNSIGNED NOT NULL, Subject VARCHAR(255) ...

2018-01-29 20:09:58 800

原创 Java for Web学习笔记(一零七):Spring框架中使用JPA(7)密码和BCrypt

密码安全存放密码安全有两个方面:用户密码传递的安全性,可以使用https来保护,也有将密码进行哈希(例如MD5)后进行传递的(复杂一点的,密码是参与哈希,还包含一些动态参数,例如时间戳等进行salt),或者两者结合起来数据库密码存储的安全性,一旦被拖库,或者别的被黑,仍能安全保护好用户的密码。目前,一般可采用BCrypt加密方式,我们绝不能将密码的明文,或者经过弱哈希(如MD5和S

2018-01-29 20:05:09 1618

原创 Java for Web学习笔记(一零六):Spring框架中使用JPA(6)Isolation和C3P0(下)

使用hibernate-c3p0的isolation设置我们前面学习的方式,都是先设置datasource,然后在JPA实现中关联该数据源。hibernate提供了hibernate-c3p0,在提供entityManagerFactoryBean的时候进行数据源的设置,实际上采用xml文件配置[1],很多都是这种方式,只不过我们采用代码方式实现。pom.xml的设置,将将hibernat

2018-01-28 17:14:22 1482 1

原创 Java for Web学习笔记(一零五):Spring框架中使用JPA(5)Isolation和C3P0(上)

何为事务的isolationisolation对于数据的一致性很重要。网上有很多介绍,推荐阅读:MYSQL官网 14.5.2.1 Transaction Isolation LevelsHibernate Tutorial 20.7.2 Transaction Isolation Levels一般而言,如果使用READ_UNCOMMITTED,这适合于只读的表格,大家读取同

2018-01-28 17:06:34 729 1

原创 Java for Web学习笔记(一零四):Spring框架中使用JPA(4)Service中使用事务

Spring和JTA的@Transactional标记总体而言,Spring的@Transactional比JTA的@Transactional要强大和更灵活。@javax.transaction.Transactional,可以配置参数:dontRollbackOn:不触发回滚的异常黑名单roolbackOn:异常白名单将覆盖缺省的rollback规则value:什么时候和如何创

2017-12-30 16:45:21 1966

原创 Java for Web学习笔记(一零三):Spring框架中使用JPA(3)JPA仓库

小例子我们使用之前JPA小例子的数据库,有三个表Authors,Books和Publishers。先对表Author进行数据读写,读写无非就是增删改查,也就是CRUD。之前,我们已经如何进行Entity和数据库表格的对应,在此略过。创建仓库接口public interface AuthorRepository { IterableAuthor> getAll(); Author

2017-12-30 16:41:32 1123

原创 Java for Web学习笔记(一零二):Spring框架中使用JPA(2)Transaction(下)

上下文的配置/* 【3】设置事务管理 * 3.1】允许@Transactional标记有效 * 使得@Transactional有效,可以被动态截获bean中被标识的方法,对其进行Spring framework method Advice,类似@EnableAsync,需要设置@EnableTransactionManagement。但需要注意:对于方法增强,我们应使用同一方式,如果配置

2017-12-30 16:23:12 1427

原创 Java for Web学习笔记(一零一):Spring框架中使用JPA(1)Transaction(上)

在spring中使用事务涉及的Bean本学习将介绍一些在Spring中使用事务设计的Bean,有一个大致的概念认识,以便了解后面的代码。如果觉得枯燥,也可以在后面的学习中回过头来看。在之前的学习中,我们在每个方法中都要创建EntityManager,进行事务的开启、关闭、回滚,代码有些相当累赘。Spring的强项在于用标记来解决,标记为@org.springframework.tran

2017-12-30 16:18:48 1125

原创 Java for Web学习笔记(一百):持久化初探(5)Enum、时间和lob的类型匹配

ENUM缺省的,ENUM对应为0,1,2,3,但这种方式可读性较差,且如果代码的顺序发生变化,将出现严重错误。更好地采用字符串方式,在数据库中可以是VARCHAR,也可以用ENUM。我们对小例子的Author表进行改造CREATE TABLE `Authors` ( `AuthorId` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

2017-11-25 17:42:58 971

原创 Java for Web学习笔记(九九):持久化初探(4)JPA小例子(下)

Entity的映射虽然在前面,我们给出了表格。但书推荐我们先设计代码,然后根据代码来设计数据库,用户需求-》代码设计-》数据库设计。但我觉得大项目可能不会这样。类和数据的映射//表明这是 @javax.persistence.Entity,缺省Entity的名字是类名,如果需要特指,可通过用name参数。@Entity(name = "PublisherEntity")/*可以

2017-11-25 17:36:09 988

原创 Java for Web学习笔记(九八):持久化初探(3)JPA小例子(上)

在tomcat中配置我们采用数据源在tomcat中配置的方式:数据库的配置在war之外。在很多网上资料中,这是设置在web app里面的xml中,这存在一个问题,如果配置封装在war中,当我们部署环境出现变化,最简单地,ip地址变更,账号密码变更,就需要重新封装war,当然,我们可以手动更改tomcat解析后的war包里面的配置,但对于升级和版本回退存在问题。最好的方式是保持w

2017-11-25 17:08:22 1286

原创 Java for Web学习笔记(九七):持久化初探(2)ORM、JPA和Hibernate

对象关系映射:Object-Relational Mapper(O/RM)我们希望直接在关系型数据库中读写对象,而无需在代码中操作SQL,这需要Object-Relational Mapper。我们可能有几十个表格,每个表格都有很多列,这样整个增删改查的代码就很繁琐,使用O/RM,我们的代码可以得到很大的简化。仍如使用上一学习中的学生例子:public Product getStude

2017-11-25 11:05:29 989

原创 Java for Web学习笔记(九六):持久化初探(1)数据存储

数据的存储介质flat-file entity storage不同的entity可能存放在不同的目录,每个entity就是目录下的一个文件,名字是代理键( surrogate key),也就是索引,方便定位。文件格式多样,可能是直接Java对象序列化,可能是XML,JSON。读写entity,需要打开文件和关闭文件,因此效率低下,且不支持代理键之外的索引。一般用于存储少量且基本的数据,

2017-11-25 10:46:03 741

原创 Java for Web学习笔记(九五):消息和集群(10)利用RabbitMQ实现订阅和发布

目的之前,我们学习了利用websocket进行订阅和发布的方式,连接数是N(N-1)/2,随着节点的增加,连接数迅速增加,只适合于小的集群。我们利用RabbitMQ重写一下事件广播。我们只需重写ClusterEventMulticaster,改为AMQPEventMulticaster。作为小例子演示,我们简单地选择fanout方式,由节点对收到的消息进行过滤。AMQPEventMulti

2017-11-12 16:31:21 1294

原创 Java for Web学习笔记(九四):消息和集群(9)RabbitMQ和消息模式(下)

例子:RPC的实现这是一个通过AMQP使用RPC的例子,RPC是个同步的处理,需要等待响应。在实际应用需要特别消息,server可能性能很慢,server可能关闭。我们是否一定要使用RPC,是否可以用异步的方式替代。在此,我们只是演示如何利用RabbitMQ提供的消息管理来实现一个RPC。思路如下:RPC Server从一个队列rpc_queue中接收消息,RPC client将请

2017-11-12 16:24:27 1145

原创 Java for Web学习笔记(九三):消息和集群(8)RabbitMQ和消息模式(中)

Work Queues:竞争消费模式(competing consumers pattern)简单模式,也可以用于多个client(subsriber)去获取消息,和简单模式对比:我们希望数据能够真正被client处理完,client处理好后应发送Basic.ACK消息给server,如果client因为某个原因未能处理好,当channel关闭,connection关闭或中断的时候

2017-11-12 16:10:38 953

原创 Java for Web学习笔记(九二):消息和集群(7)RabbitMQ和消息模式(上)

学习目的RabbitMQ是AMQP的一个实现。我们将跟随rabbitMQ官网上的例子,了解AMQP所支持的不同消息队列模式,以及代码如何实现。安装RabbitMQ ServerUbuntu自带的RabbitMQ Server,安装如下sudo apt-get install rabbitmq-serversudo service rabbitmq-server sta

2017-11-12 15:53:50 953

原创 Java for Web学习笔记(九一):消息和集群(6)利用websocket实现订阅和发布(下)

ClusterEventMulticaster:自定义的ApplicationEventMulticaster设置为root上下文的bean在root上下文的配置文件中:@Beanpublic ApplicationEventMulticaster applicationEventMulticaster(){ SimpleApplicationEventMultica

2017-11-11 20:26:45 2814

原创 Java for Web学习笔记(九十):消息和集群(5)利用websocket实现订阅和发布(上)

集群中的订阅和发布利用spring framework在本app内的订阅和发布十分简单。当我们系统越来越复杂的时候,我们需要向其他app发布消息。本学习将给出一个通过websocket来实现不同app之间消息的订购和发布。在小例子中,我们在所有节点之间都建立webSocket连接来实现消息的发布和订阅。这种方式,节点既是publisher,又是subcriber,还是broker。我们

2017-11-11 19:35:15 7730

原创 Java for Web学习笔记(八九):消息和集群(4)定制发布和订购

SimpleApplicationEventMulticaster本学习一方面进一步了解Spring对publish/subcribe的支持,另一方面也是为了后面如何利用webSocket在集群中传递事件的小例子作准备。spring将发布的消息称为event,通过消息广播器发布消息并发送到响应的订阅中。消息广播器可以理解为app内部的broker。Spring提供了SimpleApplicat

2017-11-11 10:50:38 890

原创 Java for Web学习笔记(八八):消息和集群(3)序列化Serializable

对象序列化在集群中,涉及到数据在不同的app,不同的JVM,不同的机器之间的。Java通过对象的序列化实现对象在不同app之间传递。在进一步探讨集群之前,我们需要对序列化进行了解。推荐阅读Java对象表示方式1:序列化、反序列化的作用对于要求序列化的对象,static和transient是不进行序列化的。我们看看下面简单的小例子,如何通过自定义的序列化和反序列化来实现transie

2017-11-10 22:00:52 1005 1

原创 Java for Web学习笔记(八七):消息和集群(2)应用内的publish和subscribe

学习内容Spring框架很强大,已经自带app内部的消息发布订阅了。我们甚至不需要在配置文件(代码)中加入任何内容。 我们将学习如何在一个spring应用内进行消息的发布和订阅定义事件事件需继承Spring的ApplicationEvent。在发布事件后,broker(spring framework)将发送给订阅的用户。如果订阅了这类事件,相关的子类事件也会监听到。下面是一个例子:T

2017-11-10 21:47:31 1550

原创 Java for Web学习笔记(八六):消息和集群(1)一般性了解

应用消息:紧耦合和松耦合应用消息常用的是RPC和发布/订阅,其实就是分布代表了同步和异步。随着大系统的发展,微服务架构的兴起,松耦合的发布订阅模式越来越流行。以员工系统为例,涉及财务报税服务,报销服务,工资单服务,福利服务等等,新的服务可能不断出现。如果采用紧耦合的RPC,则员工系统必须对服务了解,并主动调用这些服务,每新增一个服务,员工系统都要进行update。随着新服务的增加,员工系统

2017-11-10 21:27:36 1106

原创 Java for Web学习笔记(八五):SOAP(2)小例子

加入soap上下文soap上下文配置和spring framework不同,spring web service不支持代码配置,小例子中,我们采用了混合配制的方式,通过SoapServletContextConfiguration扫描@org.springframework.ws.server.endpoint.annotation.Endpoint标记,同时导入ws的soapServle

2017-10-03 09:39:03 1883

原创 Java for Web学习笔记(八四):SOAP(1)小例子准备

SOAP现在碰到不多,一般是较为旧的系统。SOAP可以封装在不同的消息,在一个web app中,使用最为方便的自然是封装在HTTP的消息中。我们将在小例子中增加第三个上下文,用于实现soap api。SchemaSOAP是contract-first的开发,我们先定义其schema。soap的body是xml,通过wsdl语言来定义,这是soap的关键核心。文件为*.xsd。在Eclips

2017-10-03 09:34:35 1372

Pro Android学习:联系人API

Pro Android学习系列中的传感器小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2015-06-15

Servlet速成学习

跟踪http://edu.51cto.com/course/course_id-1774.html学习,在代码上做笔记,可算是速成学习完servlet

2015-03-20

Pro Android学习:传感器

Pro Android学习系列中的传感器小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2015-02-06

[zip文件] Pro Android学习:拖拽小例子

Pro Android学习系列中的拖拽小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2014-12-12

Pro Android学习:touch screen小例子

Pro Android学习系列中的Touch Screen小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2014-11-18

Pro Android学习:list widget小例子

Pro Android学习系列中的List Widget2小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2014-10-23

Pro Android学习:widget小例子

Pro Android学习系列中的Home Screen Widget小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2014-10-15

Pro Android学习:media frameworks小例子

Pro Android学习系列中的media frameworks小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512

2014-09-30

[zip文件] Pro Android学习:telephony小例子

这是Pro Android学习系列中Telephony API部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-09-16

Pro Android学习:location小例子

这是Pro Android学习系列中location部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-08-27

Pro Android学习:2D动画小例子

这是Pro Android学习系列中2D动画部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-08-14

Pro Android学习:Alarm manager小例子

这是Pro Android学习系列中alarm manager部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-07-18

Pro Android学习:Broadcast小例子

这是Pro Android学习系列中Broadcast部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-07-01

Pro Android学习:AsyncTask小例子

这是Pro Android学习系列中AsyncTask部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-05-16

Pro Android学习:了解Handler小例子

这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-05-08

Pro Android学习:了解package的小例子

这是Pro Android学习系列中了解package部分的例子源代码。包括通过共享UserID实现资源共享,以及lib项目

2014-04-18

Pro Android学习:Android service小例子

这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

2014-03-27

Pro Android学习:Http service小例子

这是Pro Android学习系列中http service的例子源代码。

2014-02-10

Pro Android学习:permission例子

这是Pro Android学习系列中permission部分的例子源代码。

2013-12-19

Pro Android学习:Preference(首选项)小例子

这是Pro Android学习系列中preference部分的例子源代码。

2013-12-04

Pro Android学习:ActionBar小例子

Pro Android学习系列中的action bar小例子。

2013-11-07

Pro Android学习:Dialog小例子

这是Pro Android学习dialog部分的例子源代码。

2013-10-30

Pro Android学习:Fragment

这是Pro Android学习Fragment部分的例子源代码。

2013-10-25

Pro Android学习:Menu

是Pro Android学习笔记Menu系统的例子代码

2013-09-29

NTLM PPROXY client的实现(C source code)

HTTP PROXY中NTLM的客户端的C源代码。包含相关的DES等算法在内。Base64的算法,是通过网上共产主义获取,MD4,MD5,HMAC MD5的算法是RFC中提供的,其余的可以根据下面链接的步骤进行编写。我提供一个源代码的例子。其中arith_开头的相关算法,httppc_ntlm是 NTLM的type1、type2、type3消息的应答构成,test_httppc_connect是一个测试的例子,里面没有main函数,但是另外构造一个main函数,在wei_set_proxy_info之后,调用wei_httppc_connect就可以了。详细见http://blog.csdn.net/flowingflying/archive/2009/03/03/3952796.aspx 有朋友说少了头文件,我查了一下,不好意思,少了md.h。请参考下面。 /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD4 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD4 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ #ifdef __cplusplus extern "C" { #endif #ifndef WEI_MD_H #define WEI_MD_H #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif /************************************ 算法:MD4和MD5 *********************************/ //从RFC1320 The MD4 Message-Digest Algorithm的附录 //从RFC1321 The MD5 Message-Digest Algorithm的附录 /* PROTOTYPES should be set to one if and only if the compiler supports function * argument prototyping.The following makes PROTOTYPES default to 0 if it has not * already been defined with C compiler flags. */ #ifndef PROTOTYPES #define PROTOTYPES 0 #endif /* POINTER defines a generic pointer type */ typedef unsigned char * POINTER; /* UINT2 defines a two byte word */ typedef unsigned short int UINT2; /* UINT4 defines a four byte word */ typedef unsigned long int UINT4; /* PROTO_LIST is defined depending on how PROTOTYPES is defined above.If using PROTOTYPES, * then PROTO_LIST returns the list, otherwise it returns an empty list. */ #if PROTOTYPES #define PROTO_LIST(list) list #else #define PROTO_LIST(list) () #endif /* MD4 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } MD4_CTX; void MD4Init PROTO_LIST ((MD4_CTX *)); void MD4Update PROTO_LIST ((MD4_CTX *, unsigned char *, unsigned int)); void MD4Final PROTO_LIST ((unsigned char [16], MD4_CTX *)); /* MD5 context. */ typedef struct { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } MD5_CTX; void MD5Init PROTO_LIST ((MD5_CTX *)); void MD5Update PROTO_LIST ((MD5_CTX *, unsigned char *, unsigned int)); void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); #endif #ifdef __cplusplus } #endif 因为我没有认真地打包封装,而是从我的一个project中抽出了,有些遗漏,请大家原谅。今天又有网友来问PRIVATE在哪里定义。因为代码不在手头的机器上,没法仔细看,PRIVATE的定义如下 #define PRIVATE 定义为空,这是模仿C++的private,说明这个函数不会被其他文件引用,只用于本文件。 最近又收到网友的来信,说少了几个util文件。这个是不在ntlm的算法中,而是在验证例子test_httppc_connect.cpp中使用。查了一下,我确实没有放到网上。汗啊,因为验证例子是从某个程序中抽取出来,里面包含一个很简单的http的解析。我本来想update资源,没有找到 update的方法。需要说明的是这部分和真正的算法没有直接关系。放在这里,太长了,如果需要的网友,请到http://blog.csdn.net/flowingflying/archive/2009/03/03/3952796.aspx 那里下载。

2009-03-16

空空如也

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

TA关注的人

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