发送者在接收方的数字签名验证

时间:2016-08-23 13:21:47

标签: java encryption digital-signature mtom java-security

我想将一些文件发送到客户端位置并在客户端位置接收这些文件。我在下面给出了发送和接收的步骤,

发送

  1. 使用java.util.zip.Deflater JAVA API压缩需要传输的数据文件。

  2. 使用对称密钥加密压缩文件。

  3. 对称密钥是随机生成的盐,密码和密钥的组合。秘密密钥。

  4. 使用接收器的公钥对对称密钥进行加密。此密钥将作为JSON字符串写入文件。
  5. 加密数据文件&密钥文件不是压缩在一起的。
  6. 然后使用发件人的私钥对zip文件进行签名,并使用MTOM发送。
  7. 在Receiver End

    1. 使用发件人的公钥
    2. 验证收到的zip文件签名
    3. 解压缩zip文件以进行检索 - 加密数据文件&密钥文件。
    4. 使用接收器的私钥解密对称密钥。
    5. 然后使用此对称密钥解密数据文件。
    6. 解密的压缩数据文件不会被充气以检索原始文件。
    7. 我能够完成所有发送方操作。 在接收方,我可以使用公钥执行发件人签名验证之外的所有内容。在接收端,我有下面给出的代码 -

      public static void receive(String filePath, byte[] checksum)
                  throws Exception {
      
              // Check if Sender Signature is Valid or not
              // Sender Public Key to Verify Signature.
              PublicKey senderPublicKey = CertificateUtil.readPublicKey("G:\\Work\\SMC\\temp\\Certs\\Sender\\publicKey.cer");
              byte[] dataBytes = FileUtils.getFileAsBytes(filePath);
              boolean verifySig = CertificateUtil.verifySig(dataBytes, senderPublicKey, checksum);
              System.out.println("Certificate Valid " + verifySig);
      
              // Unzip the file
      
              FileZipUtils.unZipFile(filePath, "G://Work//SMC//temp//Data//Receiver");
      
              // Read Key File and Populate key Object
              String readLines = FileUtils
                      .readFirstLine("G://Work//SMC//temp//Data//Receiver//OPC_SNAPSHOT_Data_Req77_Key.csv");
              ObjectMapper mapperReceiver = new ObjectMapper();
              SymmetricKey readValue = mapperReceiver.readValue(readLines,
                      SymmetricKey.class);
      
              // Decrypt Symmetric Key using Private Key
              PrivateKey privateKey = CertificateUtil
                      .readPrivateKey("G:\\Work\\SMC\\temp\\Certs\\Receiver\\privatekey.pkcs8");
              byte[] recovered_message = CertificateUtil.decrypt(privateKey,
                      readValue.getPasswordBytes());
              readValue.setPassword(new String(recovered_message, "UTF8"));
              System.out.println(new String(recovered_message, "UTF8"));
      
              // Decrypting the file using symmetric key.
              EncryptionUtil
                      .decrypt("G://Work//SMC//temp//Data//Receiver//OPC_SNAPSHOT_Data_Req77_Encrtypt.csv",readValue);
      
          }
      

      我的问题是,要调用接收函数,我需要byte[]校验和,但我将在接收端获得此校验和。

0 个答案:

没有答案