微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Python 生成 Java 兼容的 Diffie-Hellman

如何解决使用 Python 生成 Java 兼容的 Diffie-Hellman

我正在尝试用 Python 重写以下代码。原始代码是使用 sjcl 库以 Javascript 编写的。

// Inputs
var serverPubX = "WIUBDotrk02Rk/apL11jQPbmX0quyaYz2EIkGUlVf7s=";
var serverPubY = "diZ2CbfSUy5Kr82OIfd4Ajusq2K+/kjGZ7ymcqVwn2k=";

// The code
var serverPubXBits = sjcl.codec.base64.toBits(serverPubX);
var serverPubYBits = sjcl.codec.base64.toBits(serverPubY);
var serverPubKeyPointBits = serverPubXBits.concat(serverPubYBits);

var serverPubKey = new sjcl.ecc.elGamal.publicKey(
    sjcl.ecc.curves.c256,serverPubKeyPointBits);

var clientKeys = sjcl.ecc.elGamal.generateKeys(256,1);

// What I need:
var sharedKey = clientKeys.sec.dhJavaEc(serverPubKey);

我的主要问题是 dhJavaEc 函数。根据 sjcl 文档,它是一个 Java compatible Diffie-Hellmann function。但是我在 pycryptodome 库中找不到任何等效的东西。

我检查了 dhJavaEc 代码,这是它的作用:

// Looks like it converts the server key to Jacobian and then multiply it by client key
serverPubKey.J.toJac().mult(clientKeys.sec.I,serverPubKey.J).toAffine().x.toBits()

// serverPubKey.J is the X and Y keys concatenated:
sjcl.codec.base64.fromBits(serverPubKey.J.toBits())
"WIUBDotrk02Rk/apL11jQPbmX0quyaYz2EIkGUlVf7t2JnYJt9JTLkqvzY4h93gCO6yrYr7+SMZnvKZypXCfaQ=="

// In my example,clientKeys.sec.I is this:
sjcl.codec.base64.fromBits(clientKeys.sec.I.toBits())
"zIhDVlFUpWQiRP+bjyEIhSLq8rcB8+XInXGhm6JGcVI="

// And the calculated key is:
sjcl.codec.base64.fromBits(sharedKey)
"ZBin/RV1qnfKoIuel+5fzv1y8rn3UZkMPO3pXva3VzQ="

如何使用 Python 生成等效的“sharedKey”?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。