since.2006  

数学成绩不咋滴,看了很久,结合网上文章整理了一份容易理解的身份证效验规则。

根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址区位码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址区位码:表示居民常住户口所在县(市、区)的行政区划代码。

出生日期码:表示居民出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。

数字顺序码:表示同一地址区位码所标识的区域范围内,对同年同月同日出生的人员编定的顺序号。奇数分给男性,偶数分给女性。

数字校验码:根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。由(1,2,3,4,5,6,7,8,9,X)构成。

下面举例说明该计算方法并用代码实现。

阅读全文 "身份证效验规则" »

Posted by hee at 17:08 PM | Permalink | 评论(0)

1. bit:位
    一个二进制数据0或1,是1bit;

2. byte:字节
    存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45)  即是指 45个字节;
    1 byte = 8 bit

3. 一个英文字符占一个字节;
    1 字母 = 1 byte = 8 bit

4. 一个汉字占2个字节;
    1 汉字 = 2 byte = 16 bit

byte:一个字节(8位)(-128~127)(-2的7次方到2的7次方-1)
short:两个字节(16位)(-32768~32767)(-2的15次方到2的15次方-1)
int:四个字节(32位)(一个字长)(-2147483648~2147483647)(-2的31次方到2的31次方-1)
long:八个字节(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
float:四个字节(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方,e-45是乘以10的负45次方)
double:八个字节(64位)(1.797693e+308~ 4.9000000e-324)

Posted by hee at 00:08 AM | Permalink | 评论(0)

最近要做一个登录时数字证书验证的功能,在用户登录时除了效验用户名密码,还需验证其数字证书。

相关资源:IBM developerWroks中国中的tomcat4中使用SSLjavaeye中的Acegi X.509双向认证

异同之处
tomcat4中使用SSL中的异同:jdk1.4中已经包含JSSE。
AcegiX.509双向认证中的异同:tomcat6配置文件多了SSLEnabled="true"属性。

实现方法

  • 生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。

1.创建私钥:
C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求:
C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书:
C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式:
C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12

  • 生成server证书

1.创建私钥:
C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求:
C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书:
C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式:
C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12

  • 生成client证书

1.创建私钥:
C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求:
C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书:
C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式:
C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12

  • 根据root证书生成jks文件
C:\OpenSSL\apps\root>keytool -import -v -trustcacerts -storepass password -alias root -file root-cert.pem -keystore root.jks
  • 配置tomcat使用SSL

修改conf/server.xml,tomcat6中多了SSLEnabled="true"属性。keystorefile, truststorefile设置为你正确的相关路径

<CONNECTOR truststorepass="123456" truststoretype="JKS" truststorefile="d:/path/bin/x509/root.jks"  
keystorepass="123456" keystoretype="PKCS12" keystorefile="d:/path/bin/x509/server.p12" clientauth="true"  
sslprotocol="TLS" acceptcount="100" disableuploadtimeout="true" enablelookups="false" maxsparethreads="75"  
minsparethreads="25" maxthreads="150" maxhttpheadersize="8192" sslenabled="true" port="8443" protocol="HTTP/1.1"  
scheme="https" secure="true" />
  • 将root.p12,client.p12分别导入到IE中去(IE->;Internet选项->内容->证书)

root.p12导入至受信任的根证书颁发机构,client.p12导入至个人

  • 访问你的应用http://ip:8443,如果配置正确的话会出现请求你数字证书的对话框。
  • 在jsp中取得符合x.509格式的证书
<%    
    //获得certificate chain    
    X509Certificate[] ca = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");    
    if (ca == null) {    
        out.println("No cert info!");    
    } else {    
        String serial = ca[0].getSerialNumber().toString();    
        String DN = ca[0].getSubjectDN().toString();    
    }    
%> 
Posted by hee at 06:09 AM | Permalink | 评论(2)
joram是objectweb.org的java开源JMS消息中间件产品,支持JMS1.1,自带的文档和例子比较完整。中文文档比较详细的是<>这篇,文中介绍了JMS的基本概念及joram的使用方法。

下面记录我在使用过程中遇到的一些问题。 

连接远程服务器,在joram中文文档中,使用如下方法连接远程服务器
Properties pr = new Properties();     
// 端口,IP    
pr.put("82.0.176.214","16400");     
Context ictx = new InitialContext(pr);    
   
// 在joram 4.3.26中用这种方法死活连接不上JNDI,用下面方法能连接成功    
Hashtable prop = new Hashtable();    
prop.put(Context.INITIAL_CONTEXT_FACTORY,"fr.dyade.aaa.jndi2.client.NamingContextFactory");    
prop.put("java.naming.factory.host", host);    
prop.put("java.naming.factory.port", port);    
Context jndiCtx = new InitialContext(prop);

以编程方式启动joram服务器,而不使用命令行方式启动

AgentServer.main(new String[] { "0", "./s0" }); 

注意:这种方式启动joram服务器,a3servers.xml文件的目录必须在classpath中。
注注意:假如你的a3servers.xml文件不在classpath中,他会读自己jar包中的a3servers.xml,自带的xml文件中没有配置jndi服务器,如果你碰到在程序中启动服务器,却连接不上jndi,看下是不是这个问题。
我就犯了个错误,将a3servers.xml的文件路径放classpath中去了,而不是这个文件的目录路径,joram找不到我的配置文件,就去读自带的配置文件。造成连接不上jndi,最后还是同事帮偶解决的。

 

Posted by hee at 09:04 AM | Permalink | 评论(0)
  • 使用ant启动和关闭tomcat,在build.xml中加入下面代码片段

使用这种方法要先设置好环境变量CATALINA_HOME=tomcat的安装路径
如果有时你不想重启整个应用,而只操作tomcat下某一个项目

<property name="tomcat.home" value="you tomcat home directory here."></property>   
   
<TARGET name="start-tomcat" depends="stop-tomcat">   
    <ECHO message="Start Tomcat" />   
    <JAVA dir=/bin/ fork="true" jar="/bin/bootstrap.jar">   
        <ARG value="start" />   
    </JAVA>   
</TARGET>   
   
<TARGET name="stop-tomcat">   
    <ECHO message="Stop Tomcat" />   
    <JAVA dir=/bin/ fork="true" jar="/bin/bootstrap.jar">   
        <ARG value="stop" />   
    </JAVA>   
</TARGET>
  • 使用ant操作tomcat启动/停止/重新装载(等等)某一项目

(1) 将%TOMCAT_HOME%\server\lib\catalina-ant.jar文件复制到类路径下

(2) 新建tomcatTasks.properties文件
#这些值就是catalina-ant.jar中的类文件,用来扩展ant的功能
start=org.apache.catalina.ant.StartTask
reload=org.apache.catalina.ant.ReloadTask
stop=org.apache.catalina.ant.StopTask

(3) 在build.xml中加入下面代码片段

<TASKDEF file="tomcatTasks.properties">   
    <CLASSPATH>   
        <PATHELEMENT path="/server/lib/catalina-ant.jar" />   
    </CLASSPATH>   
</TASKDEF>   
   
<TARGET name="启动当前项目">   
    <START path="/projectName" password="adminpasswd" username="admin" url="http://localhost:8080/manager" />   
</TARGET>   
   
<TARGET name="重新装载当前项目">   
    <RELOAD path="/projectName" password="adminpasswd" username="admin" url="http://localhost:8080/manager" />   
</TARGET>   
   
<TARGET name="停止当前项目">   
    <STOP path="/projectName" password="adminpasswd" username="admin" url="http://localhost:8080/manager" />   
</TARGET>

# url就是在默认首页的Tomcat Manager进去的那功能页面
# username/password就是在conf/tomcat-user.xml中配置的用户名密码,注意这个用户要有manager权限
# /projectName就是你是管理的项目的名称

配置好后,就可以使用通过ant脚本来启动,重新装载,停止某一项目了。

Posted by hee at 17:01 PM | Permalink | 评论(0)