Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption ECIES:用Javascript加密,用Java/Kotlin解密_Encryption_Encryption Asymmetric_Ecies - Fatal编程技术网

Encryption ECIES:用Javascript加密,用Java/Kotlin解密

Encryption ECIES:用Javascript加密,用Java/Kotlin解密,encryption,encryption-asymmetric,ecies,Encryption,Encryption Asymmetric,Ecies,我使用javascript中的eccrypto库,使用ECIES算法(curve-secp256k1)进行加密。JS代码中加密生成的密码无法在Kotlin中解密 下面是Javascript代码 var eccrypto=require(“eccrypto”); eccrypto.encrypt(publicKeyA,Buffer.from(“Sic Mundus Creatus Est”))。然后(函数(加密){ val ciphertext=encrypted.ciphertext //然后将

我使用javascript中的eccrypto库,使用ECIES算法(curve-secp256k1)进行加密。JS代码中加密生成的密码无法在Kotlin中解密

下面是Javascript代码

var eccrypto=require(“eccrypto”);
eccrypto.encrypt(publicKeyA,Buffer.from(“Sic Mundus Creatus Est”))。然后(函数(加密){
val ciphertext=encrypted.ciphertext
//然后将十六进制编码的密文发送到服务器
}
这是kotlin的解密代码

val cipherBytes=DatatypeConverter.parseHexBinary(密文)
val cipher:cipher=cipher.getInstance(“ECIES”、“BC”)
cipher.init(cipher.DECRYPT_模式,privateKeyA)
打印(cipher.doFinal(cipherBytes))
使用此解密代码,我得到一个坏块异常

但是,如果我只使用Java进行加密和解密,就不会有问题。而且,Javascript中的加密和解密也可以很好地工作


有什么我遗漏的吗?

您的评论“在两种环境中使用相同的公钥加密相同的消息会产生不同的密码消息”不能证明值之间存在差异。我使用公钥对相同的消息“123”进行了10次加密,得到了10次不同的加密值

这是由于(内部)加密函数中的随机元素造成的:

ciphertext: 0444a9e31cf1f8f7cabcf2a6562622ce2ee1c38bcdf9938fa48401b34fbeae7ea70c9ad1bd16343a3632ef9011ba6081a7df47ed2ca9904bf0f97febdd18f1b5da9315f744a68c87deee353b481cfbe90a49462403550e3a
ciphertext: 04e1970f415cccb62dc61de534bd61ce9627e9b0e857f6270c20b202f3e62a789979d7c9ca893d85f65f00f5462a29cb986764e34fefb8f5c5ce8f0e9700ddf777b616539ec4e860bad4cac04f8cd3b29c61513cb68a1c9b
ciphertext: 04b07bfbfa53e17446ac8ebaf6af53056274ff4e104bfe26da6176aab390d521429971c151f31a1af4b0240703d4b75a81136b22695798b1ad1cf272e842f5e60ba931972e6868ca54301ec6585ff503cfab76f69ad3beb0
ciphertext: 041d90bcfa34af06559c5f482d06a684492001bb3bd52dc2e9f2eb31cd2de27e595fad3178c0f65d3cd160e0444ae6d9cbfbd2a1e12e21525057d79b8ea24fed572426e3fdeba4a298c17fc481acb66db7b0c8f1d0d0701d
ciphertext: 04a440a994dc0a5f712b1190e1dc0bfff15c053e4a03dc3c74c0cfc965a2da5ed6d668a52b4ae1e320b5ed068fc338e2076f2bc68f156fb79d67daf74ab21c4036a23bebcca007417d5c8ed486750dd37b3f495de92312aa
ciphertext: 04033bfaa2fb90c667ca25e77abba6cdc8e6c601ebb5bf836456c810abe54a4d426b3e52477a8b97f1115905d0babbdda572d9294532d7eda032f6fc98a588c77b00b7bebfe1fe1f4319f3aa0b1776c6da02d9f24baa98c2
ciphertext: 047a1aa7e82084af63cdf76ad0bdd21865d38fdee7fa8902dbf5c0e4840c7209c9cb249698802313c83d22fc8e18b376012888ee0878d4e8c186c241b648180613b1ee460bf9eef5c9a6fab15541ae4bc16dd9f98a10c940
ciphertext: 04dbababe30bd8013bd74f846ed2f1bd818e5b826b59b9b6c6336a62e2e373e82e7f80d2a2fbc3094435e61a53325aba6585047af6bfa593260afc6e5ee737783a8dbbc60d3f99277eea95ed2671d2a81d369602388b7cb0
ciphertext: 04eb52c8d946bfd1d84b27858f78d174bf77509058d10d6bfe11ee5f6553b1c571b3c9c7389b08e596735342584c2be43f5ef4e6952d3db7b5239d00b2c7d22f1ca9e588a8f6dc5c8274d97d18999c4a88702d12b9d56ea6
ciphertext: 04808530ee927d5445a1e8f7a06b6bd8c1457cbf89ea6a75e2a28fd8899e06e8ccc5fab8b45536610a79a50ebf3ca1ed5fafb782fe483165fdc483c7e2e3c3724409d539cdbf586f090b783647d791f33ddfa8e2ba29e328
我找到了解决方案(或者说解决了实际问题)。希望它能帮助未来的开发者:

javascript和java实现之间的加密/解密不匹配是因为这些实现使用不同的哈希算法和AES加密参数

使用BouncyCastle在Java中实现ECIES的实现很糟糕。它使用128位的AES,不使用安全哈希算法,没有对MAC进行健壮的检查,并且几乎没有测试用例


作为一种解决方法,我现在使用一个自定义编写的ECIES Java实现,它使用SHA-512进行哈希、AES加密(使用256位密钥和AES/CBC/PKCS7Padding模式)。此新实现是
eccrypto
javascript库引擎在引擎罩下使用的。现在,它们工作正常!

尝试在这两种环境中加密某些内容,如果两种操作都仅在javascript或Kotlin中完成,则查看值匹配加密和解密循环是否工作正常。但是,无法在其中一种环境中进行加密由另一方加密。在两种环境中使用相同的公钥加密相同的消息会产生不同的密码消息。请提供完整的示例以及密钥生成、密钥传输/编码步骤和密钥。我很高兴您找到了解决方案。您能分享“自定义编写”ECIES实现吗?这并不能回答他提出了问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@derloopkat:我的回答不是批评也不是要求澄清。作者在评论中想知道“在两种环境中使用相同的公钥加密相同的消息会产生不同的密码消息”,我想向他展示使用这种加密,即使使用相同的程序和环境,您也会收到不同的密文,这是很正常的。对不起,这篇文章不是我写的。这是来自Review的模板。