每当回首往事时,不因碌碌无为而羞耻,不因虚度年华而悔恨...

发布新日志

  • 总经理助理岗位职责

    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日,天气阴有雨...

我的栏目

数据统计

  • 访问量: 3890
  • 日志数: 7
  • 建立时间: 2007-03-09
  • 更新时间: 2007-05-29

RSS订阅

Open Toolbar