1. 程式人生 > >軟實現非對稱加解密,公鑰證書與公鑰值區別,包含提取公約值程式碼

軟實現非對稱加解密,公鑰證書與公鑰值區別,包含提取公約值程式碼

目前有部分未採購簽名驗籤伺服器的企業,採用軟實現做非對稱、對稱加解密,本文簡略說明一下工作過程中遇到的問題。

本交易涉及傳送方,接收方

問題背景:

對方即接收方採用的是軟實現,並且只提供了公鑰值(未經CA簽發)
我方即傳送方,採用的是硬體簽名驗籤服務。伺服器中存有我方的私鑰,以及加密公鑰;對方提供的是公鑰值,無法匯入到簽名驗籤伺服器(會驗根證書)

需求

對傳輸的json串進行簽名。
問題:對方無法通過base64編碼的公鑰證書驗證簽名,報錯資訊為:data isn’t an object(tag=-96),在這裡插入圖片描述
初步定位到是公鑰證書問題,根據對方軟實現程式碼,可能是對方無法提取公鑰值造成。經過提取後的公鑰值傳送給對方之後,驗簽完成,這裡提供提取公鑰值

的程式碼。

public static String getPublickeyFromCert( String fileName ) {

       FileInputStream in = null;

       X509Certificate x509 = null;

try {

       in = new FileInputStream( fileName );

       byte[] bs = new byte[ in.available() ] ;

       in.read( bs ) ;

      x509 = NetSignAgent.generateCertificate( bs ) ;

     return Base64.encode( x509.getPublicKey().getEncoded() );

    } catch (Exception e) {

          e.printStackTrace();

          return null;

  }finally{

          if ( in != null ) {

			try {

          in.close();

} catch (IOException e) {

      e.printStackTrace();

}

    }

}

}

公鑰證書裡包含使用者資訊、證書版本等資訊,驗籤時會對證書鏈進行驗證;公鑰值僅僅是一串編碼數值,不能作為真正的PKI體系一員,因為公私鑰對一個軟體就能生成,而且完全暴露在外,可以被隨便替換,並且驗籤時,無可信任第三方CA。