gpt4 book ai didi

java - 将 Java 公共(public) DSA 或 RSA key 转换为 Node 可以理解的格式

转载 作者:行者123 更新时间:2023-12-01 13:39:08 26 4
gpt4 key购买 nike

我想在 Android 中签署消息并在 Node.js Web 应用程序中验证签名。

在android端,我创建 key 如下:

 KeyPairGenerator generator = KeyPairGenerator.getInstance("DSA");
generator.initialize(dsabits, sr);
KeyPair keyPair = generator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();


FileOutputStream fos = new FileOutputStream(filename);
fos.write(publicKey.getEncoded());
fos.close();

现在我想使用该公钥来验证 Node.js 中的消息:

var messageBase64 = "SGVsbG8gRmVsaXgh";
var signatureBase64 = 'MCwCFF9mV7/m3D8qjJKZSj3JMtqEmCQmAhQk9wSVnyOQgvUd5/n/iGAr4cNxLw=='
var crypto = require('crypto');
var fs = require('fs');

var verify = crypto.createVerify('dsaWithSHA');
var buffer = new Buffer(messageBase64, 'base64');
verify.update(buffer);
var key = fs.readFileSync('./keys/public.key');

var isValid = verify.verify(key, signatureBase64 , 'base64');

如何将 Java 生成的 key 文件转换为 Node 可以读取的文件?或者我如何创建一个可以在两者中使用的 key 对?

最佳答案

尝试以下代码。

    PEMWriter writer = new PEMWriter(new FileWriter("test.pem"));
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(3072);
KeyPair keyPair = kpg.generateKeyPair();
writer.writeObject(keyPair.getPublic());
writer.close();

我使用了 RSA 而不是 DSA(不过 DSA key 应该也可以工作)。 DSA 只能用于遗留应用程序。在 Java SE 上,它甚至被限制为 512 或 1024 位 key ,这不再被认为是安全的。如果您的 Android API 行为不当,请尝试 [SpongyCaSTLe](http://rtyley.github.io/spongycaSTLe/)

关于java - 将 Java 公共(public) DSA 或 RSA key 转换为 Node 可以理解的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com