Java Signature无法跨平台验证

时间:2012-11-22 14:09:52

标签: java signature

我遇到了问题,我无法解决问题。 我在linux上创建了一个签名对象,并尝试在Windows上验证它并且它失败了。 反过来相反。如果我在一个平台上待在一切都很好。

首先我想到了编码,所以我开始进行一些测试,例如将-Dfile.encoding设置为不同的标准。但即使我使用UTF-8创建签名并使用windows-1215验证它,如果我在同一平台上保持一切正常。

代码非常基本,我找不到问题:

创建签名:

public void signData(File fileToSign, String outPutFileName)...
{
    Signature dsa = Signature.getInstance("DSA");
    dsa.initSign(privateKey);

    byte[] bytesToSign = FileUtils.readByteArrayFromFile(fileToSign);
    dsa.update(bytesToSign);

    byte[] sigData = dsa.sign();
    FileUtils.saveByteArrayToFile(outPutFileName, sigData);
}

public static void saveByteArrayToFile(String outPutFileName, byte[] bytesToSave)...
{
    FileOutputStream fos = new FileOutputStream(outPutFileName);
    fos.write(Base64.encodeBase64(bytesToSave));
    fos.close();
}

验证它:

public boolean isVerified(File fileToVerify, File signatureFile)...
{
    byte[] sigData = FileUtils.readByteArrayFromFile(signatureFile);

    Signature signature = Signature.getInstance("DSA");
    signature.initVerify(publicKey);

    byte[] byteToVerify = FileUtils.readByteArrayFromFile(fileToVerify);
    signature.update(byteToVerify);

    return signature.verify(sigData);
}

public static byte[] readByteArrayFromFile(File file)...
{
    FileInputStream fis = new FileInputStream(file);
    byte[] byteArray = new byte[fis.available()];
    fis.read(byteArray);
    fis.close();

    return Base64.decodeBase64(byteArray);
}

我希望有人能指出我正确的方向 感谢。

亲切的问候,

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案。 问题确实是编码。现在我只需对数据进行解码和编码,一切都很好。 我相应地更新了代码。