我有一个问题,我无法解决它。我在 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);
}
我希望有人能指出我正确的方向。
谢谢。
亲切的问候,