-
总经理助理岗位职责
2007-05-29 13:17:46
总经理助理既联系上下,又协调左右,既是政务的参谋,又是事务的“主管”,是总办这一运转中枢的“首脑”。总经理助理应认识到自己所处的地位和所应发挥的重要作用,爱岗敬业,尽职尽责地履行自己的职责,富有成效地做好总办工作。当好总经理助理,主要应在以下8个方面努力:
一要认清自己,处事有原则。找不准位置,也就找不准工作的立足点、切入点、着力点,工作起来也就找不着“感觉”。总经理助理处于“总管家”与“不管部长”的双重位置,围绕着中心工作,上协调领导,下联系群众,事务、政务都要过问,其他部门管不了、不该管的,都要总经理助理去管。总经理助理要把握所应扮演的角色,把握好工作分寸,管理不巨细,参谋不决断,助手不揽权,不越权,不越位,不缺位,工作要到位。
二要耳聪目明,作好参谋工作。从大的方面说,当助手重要的在于搞好信息、决策、督查服务。及时地捕捉信息,准确地搞好反馈,积极地当好决策参谋。不仅要善于发现问题,还要认真分析问题,给领导解决问题提供决策参考。领导一旦采纳决策意见,还要制订决策备选方案。备选方案不能只是一种,要有多种方案,以便优中选优,“拍板定案”。决策制定后要采取得力措施抓落实,并及时搞好督促检查,搞好落实情况反馈。
三要善于长袖善舞,作好各部门之间的“润滑油”。首先要协调好上下的关系。对上:要尊重而不盲从,服务而不奴婢,更不能违背原则盲从领导。陈云同志说,要“不唯书,不唯上,要唯实。”在实际工作中,不看领导眼色是不可能的,但要有分寸,要坚持原则,按章办事,不能惟命是从。待下:以礼,以诚,以情。不要盛气凌人,不搞瞎指挥、乱指挥,不欺下瞒上。再是协调好内外关系,外求支持协作,内求团结向上。
四要高效快捷处理有关事务。总经理助理必须要有强烈的时效观念、意识,求真务实、雷厉风行的工作作风,运筹帷幄的领导艺术,在有限的时间里办好应办之事。要善于“分身”,明确该干什么,不该干什么,先干什么,后干什么。要有所为,有所不为。为好应为之事。该别人“代劳”之事,要分解任务到人,并明责授权,责权相等。一旦分工、明责、授权,要少插手,多支持下级大胆工作。不要事无巨细,事必躬亲。不该为之事,“亲自”未必就好,还往往会挫伤员工的积极性。工作有成绩,也会有不足,要客观地分析是非功过,更不要跟下边抢功争好。尤其是出现过错不要推诿,对自己的过错更不要上推下卸。工作要扎实,力求实绩、实效。总办工作不能摆花架子,更不能弄虚作假。要真实地反映情况,扎实地开展工作。
五要不断提升个人素质,增加人文魅力。自身素质强,就会产生人文 “魅力”和影响力。要当好总经理助理,要*权力的影响力,但更重要的是*非权力的影响力。只有二者有机结合,才能更好地开展工作。要注重发挥自身非权力因素的影响力,*德、识、才、学,*高尚的人格、丰富的知识、高超的才干、卓有成效的方法艺术来开展工作。在提高自身素质的同时,还要学会尊重,学会理解,学会“给予”,尊重上级,理解同级,善于“给予”下级。培养人才,帮助人展现才能,实现价值。
六要注意自身形象,起好表率作用。总办处在公司的第一线,一举一动都代表着公司形象。总经理助理务必要加强自身修养,注重自我形象塑造。同时,要引导公司全体员工强化形象意识,形成塑造形象的共识。工作中,要重视外在形象的“包装”,全心全意地、热情细致地待人接物,为人处事。要经常并善于“换位思考”,想一想假如自己是领导或是员工怎么办,设身处地地搞服务、办实事、办好事。
七要制订并完善游戏规则。一方面要根据工作需求,建立一套切实可行的工作规章制度,并不折不扣地去执行。另一方面要在工作实践中不断地加以完善。比如,要建立值班制度、会务制度、文秘制度、以及廉政制度等,用制度管人、管事。根据游戏规则,奖优罚劣。表扬、奖励好的,批评、惩罚坏的。不能好坏不分,是非不明,不能让“会叫唤的孩子多吃糖”,更不能形成或陷入“干的不如不干的,不干的不如捣蛋的”怪圈,建立并逐步完善好人能够积极办好事,坏人不敢办坏事的良好机制,确保公司工作正常、有序、高效运转。
八要努力营造温馨快乐的工作环境。要着力创造总办工作的良好环境,用良好的环境去影响人、改造人、约束人。积极倡导、努力创造勤奋学习、积极向上、努力开拓、团结协作、乐于奉献的良好环境,增强总办整体效能。总经理助理要把创造温馨快乐的工作环境视为重要的工作内容,思想上重视,工作上要研究、策划,采取切实有效的举措,搞好宣传,形成舆论氛围。搞些健康有益的文娱活动,活跃员工的文化生活,努力创造一种用事业留人、用待遇留人、用情感留人的良好工作环境。 -
生气
2007-03-27 18:40:37
两个字:生气
-
java中日期的操作
2007-03-20 17:00:42
/**
* 取得指定月份的第一天
*
* @param strdate String
* @return String
*/
public String getMonthBegin(String strdate)
{
java.util.Date date = parseFormatDate(strdate);
return formatDateByFormat(date,"yyyy-MM") + "-01";
}/**
* 取得指定月份的最后一天
*
* @param strdate String
* @return String
*/
public String getMonthEnd(String strdate)
{
java.util.Date date = parseFormatDate(getMonthBegin(strdate));
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH,1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return formatDate(calendar.getTime());
}/**
* 常用的格式化日期
*
* @param date Date
* @return String
*/
public String formatDate(java.util.Date date)
{
return formatDateByFormat(date,"yyyy-MM-dd");
}/**
* 以指定的格式来格式化日期
*
* @param date Date
* @param format String
* @return String
*/
public String formatDateByFormat(java.util.Date date,String format)
{
String result = "";
if(date != null)
{
try
{
SimpleDateFormat sdf = new SimpleDateFormat(format);
result = sdf.format(date);
}
catch(Exception ex)
{
LOGGER.info("date:" + date);
ex.printStackTrace();
}
}
return result;
}/**
* 日期操作
*
* @author xxx
* @version 2.0 jdk1.4.0 tomcat5.1.0 * Updated Date:2005/03/10
*/
public class DateUtil {
/**
* 格式化日期
*
* @param dateStr
* 字符型日期
* @param format
* 格式
* @return 返回日期
*/
public static java.util.Date parseDate(String dateStr, String format) {
java.util.Date date = null;
try {
java.text.DateFormat df = new java.text.SimpleDateFormat(format);
String dt=Normal.parse(dateStr).replaceAll(
"-", "/");
if((!dt.equals(""))&&(dt.length()<format.length())){
dt+=format.substring(dt.length()).replaceAll("[YyMmDdHhSs]","0");
}
date = (java.util.Date) df.parse(dt);
} catch (Exception e) {
}
return date;
}public static java.util.Date parseDate(String dateStr) {
return parseDate(dateStr, "yyyy/MM/dd");
}public static java.util.Date parseDate(java.sql.Date date) {
return date;
}
public static java.sql.Date parseSqlDate(java.util.Date date) {
if (date != null)
return new java.sql.Date(date.getTime());
else
return null;
}public static java.sql.Date parseSqlDate(String dateStr, String format) {
java.util.Date date = parseDate(dateStr, format);
return parseSqlDate(date);
}public static java.sql.Date parseSqlDate(String dateStr) {
return parseSqlDate(dateStr, "yyyy/MM/dd");
}
public static java.sql.Timestamp parseTimestamp(String dateStr,
String format) {
java.util.Date date = parseDate(dateStr, format);
if (date != null) {
long t = date.getTime();
return new java.sql.Timestamp(t);
} else
return null;
}public static java.sql.Timestamp parseTimestamp(String dateStr) {
return parseTimestamp(dateStr, "yyyy/MM/dd HH:mm:ss");
}/**
* 格式化输出日期
*
* @param date
* 日期
* @param format
* 格式
* @return 返回字符型日期
*/
public static String format(java.util.Date date, String format) {
String result = "";
try {
if (date != null) {
java.text.DateFormat df = new java.text.SimpleDateFormat(format);
result = df.format(date);
}
} catch (Exception e) {
}
return result;
}public static String format(java.util.Date date) {
return format(date, "yyyy/MM/dd");
}/**
* 返回年份
*
* @param date
* 日期
* @return 返回年份
*/
public static int getYear(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.YEAR);
}/**
* 返回月份
*
* @param date
* 日期
* @return 返回月份
*/
public static int getMonth(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MONTH) + 1;
}/**
* 返回日份
*
* @param date
* 日期
* @return 返回日份
*/
public static int getDay(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.DAY_OF_MONTH);
}/**
* 返回小时
*
* @param date
* 日期
* @return 返回小时
*/
public static int getHour(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.HOUR_OF_DAY);
}/**
* 返回分钟
*
* @param date
* 日期
* @return 返回分钟
*/
public static int getMinute(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.MINUTE);
}/**
* 返回秒钟
*
* @param date
* 日期
* @return 返回秒钟
*/
public static int getSecond(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.get(java.util.Calendar.SECOND);
}/**
* 返回毫秒
*
* @param date
* 日期
* @return 返回毫秒
*/
public static long getMillis(java.util.Date date) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.getTimeInMillis();
}/**
* 返回字符型日期
*
* @param date
* 日期
* @return 返回字符型日期
*/
public static String getDate(java.util.Date date) {
return format(date, "yyyy/MM/dd");
}/**
* 返回字符型时间
*
* @param date
* 日期
* @return 返回字符型时间
*/
public static String getTime(java.util.Date date) {
return format(date, "HH:mm:ss");
}/**
* 返回字符型日期时间
*
* @param date
* 日期
* @return 返回字符型日期时间
*/
public static String getDateTime(java.util.Date date) {
return format(date, "yyyy/MM/dd HH:mm:ss");
}/**
* 日期相加
*
* @param date
* 日期
* @param day
* 天数
* @return 返回相加后的日期
*/
public static java.util.Date addDate(java.util.Date date, int day) {
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(getMillis(date) + ((long) day) * 24 * 3600 * 1000);
return c.getTime();
}/**
* 日期相减
*
* @param date
* 日期
* @param date1
* 日期
* @return 返回相减后的日期
*/
public static int diffDate(java.util.Date date, java.util.Date date1) {
return (int) ((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000));
}
}Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int date = now.get(Calendar.DAY_OF_MONTH);
int month = now.get(Calendar.MONTH) + 1;
int hour = now.get(Calendar.HOUR);
int min = now.get(Calendar.MINUTE);
int sec = now.get(Calendar.SECOND);import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @李春雷
*
public class ManageWeek {
//判断两个日期是否在同一周
boolean isSameWeekDates(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
if (0 == subYear) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
return false;
}
//产生周序列
public static String getSeqWeek(){
Calendar c = Calendar.getInstance(Locale.CHINA);
String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
if(week.length()==1)week = "0" + week;
String year = Integer.toString(c.get(Calendar.YEAR));
return year+week;
}
//获得周一的日期
public static String getMonday(Date date){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
//获得周五的日期
public static String getFriday(Date date){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
public static void main(String[] args){}
}
-
java的输入和输出- [java学习]
2007-03-20 15:14:15
java.io包提供所有关于输入和输出的接口和类。
InputStream和OutputStream为字节流的输入输出类,是所有面向字节的输入输出流父类。
Reader和Write为字符流的输入输出类,是所有面向字符的输入输出流的父类。字符流用于存储和检索文本,以Unicode字符为单位进行读写。当写入一个16位的Unicode字符时,按字节分为两部分,先写高位字节,后写低位字节。
File和RandomAccessFile为对文件操作的类。File类记载文件信息并以顺序方式访问文件,RandomAccessFile类以随机方式访问文件。
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
InputStream中的read()方法有一个被定义为abstract int read(),为什么被定义为抽象方法呢?主要是为了让继承InputStream类的子类可以针对不同的外部设备定义不同的read()方法。
java规定read()方法必须配合异常处理机制来使用,所以当用户使用read()方法时,必须加入IOException来执行异常处理,或是利用try-catch来执行错误控制。
从键盘读取一个字符的程序:
import java.io.*;
public class ReadKeyboard{
public static void main(String args[])throws IOException{
int a;
System.out.print("please input a character:");
a=(char)System.in.read();
System.out.println("The character you input is:"+(char)a);
}
}×××××××××××××××××××××××××××××××××××××××××××××××
下面这个程序说明FileInputStream的用法:
import java.io.*;
public class OpenFile{
public static void main(String []args){
try{
FileInputStream fis=new FileInputStream("OpenFile.java");
int n=512;
byte buffer[]=new byte[n];
while((fis.read(buffer,0,n)!=-1)&&(n>0)){
System.out.print(new String(buffer));
}
System.out.println();
fis.close();
}
catch(IOException ioe){ System.out.println(ioe); }
catch(Exception e){ System.out.println(e); }
}
}×××××××××××××××××××××××××××××××××××××××××××××××
下面一个程序说明write方法的标准输出的用法:将A输出到屏幕
import java.io.*;
public class WriteDemo{
public static void main(String[] args){
char a='A';
System.out.write(a);
System.out.write('\n');
}
}其它基本一样,不再赘述。
××××××××××××××××××××××××××××××××××××××××××××××××
过滤流:
java可以把两种类结合在一起构成过滤流,其方法就是使用一个已经存在的流构造另一个流。例如,如果想从一个文件中读取数字,可以先创建一个FileInputStream,然后把该类传递给一个DataInputStream的构造函数,如下:
FileInputStream fis=new FileInputStream("write.txt");
DataInputStream dis=new DataInputStream(fis);
double d=dis.readDouble()
****************************************************************
对象流:
将对象存取自一个流成为序列化(serialization),为了完成对象的序列化,这些对象需要符合以下几个条件:类需要实现Serializable接口(许多java标准类都是);若有数据不是可序列化的或不需要写出的(例如一些敏感而不想暴露的数据),则需将其声明为transient。
-
UltraEdit的JAVA环境配置
2007-03-20 12:07:04
对于才学Java的朋友来说,如何使用Jdk是一个问题。JDK包中主要有三个重要的可执行文件:Javac,Java和AppletViewer。
Java源程序是以.Java为后缀的简单文本文件,可以用各种文本编辑工具来书写,如:计事本、dos下的edit等。但笔者推荐使用支持高亮显示,也支持Java的最新标准的编辑软件──UltraEdit。通过配置它可以很方便地实现Java程序的编译和运行。现将配置方法说明如下:
1.先装UltraEdit软件在你电脑的任何目录下。
2.如装JDK在c:\JDK1.4\目录下。
3.如你编写的Java文件保存在d:\Java目录下,也是你建立的类。
4.打开UltraEdit软件,再打开Advanced/Tool Configuation。
5.配置Java命令:
在Command Line输入:Java -classpath d:\Java %n
在Working Diretory输入:c:\JDK1.3\bin (即Java可执行文件的目录)
在Menu Item Name输入:Java
选中Out To List Box和Capture Output,点Insert按钮。
6.配置Javac命令。
在Command Line输入:Javac -classpath d:\Java %f
在Working Diretory输入:c:\JDK1.3\bin(即Javac可执行文件的目录)
在Menu Item Name输入:Javac
同理选中Out To List Box和Capture Output,点Insert点ok。
7.配置完成。
你可以编一个试试了,保存在d:\Java下,点目录中的Java和Javac,看到结果了吧!也可以和JDK集成。
对于AppletViewer命令,可以在MS-DOS下进行,利用F3可以重复上一次的命令,如:d:\Java:>c:\JDK1.3\bin\AppletViewerzxg.html就可以进行Java Applet的运行,很方便的!
如2,3目录不一样,以后配置相应改为自己的目录就可以了 -
JAVA对数字证书的常用操作
2007-03-17 12:13:08
一:需要包含的包
import java.security. * ;
import java.io. * ;
import java.util. * ;
import java.security. * ;
import java.security.cert. * ;
import sun.security.x509. *
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;二:从文件中读取证书
用keytool将.keystore中的证书写入文件中,然后从该文件中读取证书信息CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in = new FileInputStream( " out.csr " );
Certificate c = cf.generateCertificate(in);
String s = c.toString();
三:从密钥库中直接读取证书
String pass = " 123456 " ;
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,pass.toCharArray());
java.security.cert.Certificate c = ks.getCertificate(alias); // alias为条目的别名
四:JAVA程序中显示证书指定信息
System.out.println( " 输出证书信息:\n " + c.toString());
System.out.println( " 版本号: " + t.getVersion());
System.out.println( " 序列号: " + t.getSerialNumber().toString( 16 ));
System.out.println( " 主体名: " + t.getSubjectDN());
System.out.println( " 签发者: " + t.getIssuerDN());
System.out.println( " 有效期: " + t.getNotBefore());
System.out.println( " 签名算法: " + t.getSigAlgName());
byte [] sig = t.getSignature(); // 签名值
PublicKey pk = t.getPublicKey();
byte [] pkenc = pk.getEncoded();
System.out.println( " 公钥 " );
for ( int i = 0 ;i < pkenc.length;i ++ )System.out.print(pkenc[i] + " , " );
五:JAVA程序列出密钥库所有条目
String pass = " 123456 " ;
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,pass.toCharArray());
Enumeration e = ks.aliases();
while (e.hasMoreElements())
java.security.cert.Certificate c = ks.getCertificate((String)e.nextElement());
六:JAVA程序修改密钥库口令
String oldpass = " 123456 " ;
String newpass = " 654321 " ;
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,oldpass.toCharArray());
in.close();
FileOutputStream output = new FileOutputStream( " .keystore " );
ks.store(output,newpass.toCharArray());
output.close();
七:JAVA程序修改密钥库条目的口令及添加条目
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,storepass.toCharArray());
Certificate [] cchain = ks.getCertificate(alias);获取别名对应条目的证书链
PrivateKey pk = (PrivateKey)ks.getKey(alias,oldkeypass.toCharArray());获取别名对应条目的私钥
ks.setKeyEntry(alias,pk,newkeypass.toCharArray(),cchain);向密钥库中添加条目
第一个参数指定所添加条目的别名,假如使用已存在别名将覆盖已存在条目,使用新别名将增加一个新条目,第二个参数为条目的私钥,第三个为设置的新口令,第四个为该私钥的公钥的证书链
FileOutputStream ōutput=new FileOutputStream("another");
ks.store(output,storepass.toCharArray())将keystore对象内容写入新文件八:JAVA程序检验别名和删除条目
FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,storepass.toCharArray());
ks.containsAlias( " sage " );检验条目是否在密钥库中,存在返回true
ks.deleteEntry( " sage " );删除别名对应的条目
FileOutputStream output = new FileOutputStream( " .keystore " );
ks.store(output,storepass.toCharArray())将keystore对象内容写入文件,条目删除成功
九:JAVA程序签发数字证书
(1)从密钥库中读取CA的证书FileInputStream in = new FileInputStream( " .keystore " );
KeyStore ks = KeyStore.getInstance( " JKS " );
ks.load(in,storepass.toCharArray());
java.security.cert.Certificate c1 = ks.getCertificate( " caroot " );
(2)从密钥库中读取CA的私钥
PrivateKey caprk = (PrivateKey)ks.getKey(alias,cakeypass.toCharArray());
(3)从CA的证书中提取签发者的信息
byte [] encod1 = c1.getEncoded(); 提取CA证书的编码
X509CertImpl cimp1 = new X509CertImpl(encod1); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo1 = (X509CertInfo)cimp1.get(X509CertImpl.NAME + " . " + X509CertImpl.INFO); 获取X509CertInfo对象
X500Name issuer = (X500Name)cinfo1.get(X509CertInfo.SUBJECT + " . " + CertificateIssuerName.DN_NAME); 获取X509Name类型的签发者信息
(4)获取待签发的证书
CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in2 = new FileInputStream( " user.csr " );
java.security.cert.Certificate c2 = cf.generateCertificate(in);
(5)从待签发的证书中提取证书信息
byte [] encod2 = c2.getEncoded();
X509CertImpl cimp2 = new X509CertImpl(encod2); 用该编码创建X509CertImpl类型对象
X509CertInfo cinfo2 = (X509CertInfo)cimp2.get(X509CertImpl.NAME + " . " + X509CertImpl.INFO); 获取X509CertInfo对象
(6)设置新证书有效期
Date begindate = new Date(); 获取当前时间
Date enddate = new Date(begindate.getTime() + 3000 * 24 * 60 * 60 * 1000L ); 有效期为3000天
CertificateValidity cv = new CertificateValidity(begindate,enddate); 创建对象
cinfo2.set(X509CertInfo.VALIDITY,cv); 设置有效期
(7)设置新证书序列号
int sn = ( int )(begindate.getTime() / 1000 ); 以当前时间为序列号
CertificateSerialNumber csn = new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)设置新证书签发者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);应用第三步的结果
(9)设置新证书签名算法信息
AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);
(10)创建证书并使用CA的私钥对其签名
X509CertImpl newcert=new X509CertImpl(cinfo2);
newcert.sign(caprk,"MD5WithRSA"); 使用CA私钥对其签名
(11)将新证书写入密钥库ks.setCertificateEntry( " lf_signed " ,newcert);
FileOutputStream out = new FileOutputStream( " newstore " );
ks.store(out, " newpass " .toCharArray()); 这里是写入了新的密钥库,也可以使用第七条来增加条目
十:数字证书的检验
(1)验证证书的有效期
(a)获取X509Certificate类型对象
CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in1 = new FileInputStream( " aa.crt " );
java.security.cert.Certificate c1 = cf.generateCertificate(in1);
X509Certificate t = (X509Certificate)c1;
in2.close();
(b)获取日期
Date TimeNow=new Date();
(c)检验有效性
try {
t.checkValidity(TimeNow);
System.out.println( " OK " );
} catch (CertificateExpiredException e) { // 过期
System.out.println( " Expired " );
System.out.println(e.getMessage());
} catch ((CertificateNotYetValidException e) { // 尚未生效
System.out.println( " Too early " );
System.out.println(e.getMessage());}
(2)验证证书签名的有效性
(a)获取CA证书
CertificateFactory cf = CertificateFactory.getInstance( " X.509 " );
FileInputStream in2 = new FileInputStream( " caroot.crt " );
java.security.cert.Certificate cac = cf.generateCertificate(in2);
in2.close();
(c)获取CA的公钥
PublicKey pbk=cac.getPublicKey();
(b)获取待检验的证书(上步已经获取了,就是C1)
(c)检验证书
boolean pass = false ;
try {
c1.verify(pbk);
pass = true ;
} catch (Exception e) {
pass = false ;
System.out.println(e);
} -
3.16天气阴有雨
2007-03-16 13:48:43
3月16日,天气阴,气象报告说会有雨...
还记得3月15日,天气晴,阳光明媚,空气清新,到处弥漫着喜悦...
无奈,天总是善变,人们就把人的变化说成“变脸比变天还快”
3月16日,天空很灰,就象我的心情一样,今天不再活泼,不再乐观,不再可爱,莫明的,只是这样淡淡的忧愁
不明白谁对谁错,只是生活让我们彼此远离,彼此陌生.
想要有天远走他乡,想要有天一个人背着双肩包,踏上远去的火车,支身去一个陌生的地方,插在一群陌生的人堆
中,向前,向前...
没有牵挂,没有负担,象呼吸空气一样自由,轻松地活着...
可惜,悲哀的是在享受自由的同时却处在了空虚和无助中彷徨!!!
3月16日,天气阴有雨...