kjur / jsrsasign

The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free cryptography library supporting RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, OCSP, CMS SignedData, TimeStamp, CAdES and JSON Web Signature/Token in pure JavaScript.
https://kjur.github.io/jsrsasign
Other
3.25k stars 646 forks source link

Hash mismatch #578

Open lixianbin1 opened 1 year ago

lixianbin1 commented 1 year ago

The Java personnel used RSA/EBC/OAEPWithSHA-256AndMGF1Padding for encryption, but when I got this, I couldn't solve it, prompting me to Hash mismatch. Can anyone point out my problem? Here is my code

const key =`-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCUjrVC/XhTC+or
l4qe6IcH7rKDnZhxwInROTzkYaqWyYjU543ObEnnEB93kGxrP6oEGR4LRzWNsPsX
WLsCTqdVWw14r++EahFq2odjlvztDGP24csO0Sw5QFbbVe4V7wuIOIW9WLZDfb3K
Krd3K0VgNAEtGu3Um+OqFXJOsABHjCwePB7GCeDcZ3DHkc3/juwnUOlPCkeL3qTi
DZKQwAPPGMgi7+3p5mCAe670EqcOFLlJNHW77uYEOixTQFC/ZgMg95mJ3eRfrzv7
DBQZ6LJbKcHXz/7XWnsSSZ7sAKBS58AxJCH/2QEAkZfocFdsOPDSEXBe2D1Du5Io
Mm6lFCDfAgMBAAECggEAEzvKwgqZGn9vaQdsvhgy61b/K8UqqIeaEEmN1a/Da1Ra
b94u4OvqQY031b4QG26Zr4AlAKbOizK/v40QYUMXrRhlzRtSMl2dNa1nXAB/bJ1v
D9a5+IgiZqMq26jrc1GIt7FBt3sV1fUgrl0LddVXXRY+lL1oz18DgdDXBNMKpjiQ
Olz8aPz9fviagWaXyUXfqMgyGE1rdC1+u1hU1dSLa5fPegR78Me9lDtpKIvljYd4
Hl8J6hmPK39HV5dfNXVE29di9Ndx5l4DEMb545cgIMNISFdu81u5MX+Dh/Dk1zKT
JM/8BzTuXl86bkICnKsfPDerD9D1uOi905hz63QQaQKBgQDDQah8FmuK+kkWHzyl
bSLqm0PbfY52T4QAYwbBd5FeHnTxUqRCj6U+C5yTmABNQ8dVY4/XLLHvyA6lUloS
13bFFZLuZWfRMYN7hsa5zRC70r5hgRRJ1czrsCO8hpnC7UrWACEQ8djMaeMC4BIB
wHJdHZaULJIHf/bO/QvAGDrSBQKBgQDCxelyxoGRaV8lljomX5/XeBUNj9iw0G8x
ETPi/B2+dMYkLVBJaO1W1YJZiwvM+Eg2IfMs/fsuYaD1EiK11yUl70Q9rPE1ysKv
BZKZrA//tU0kyvXG9sqzKM1NP2diYy/Oe57ncXm3ZoLe2J/10+k3T74DGirEt+W/
RC88HWXokwKBgCObIo1WTVAvqgpFsfp8t2RO4gXxlHwQrgKgDEhVdIXUSgEDz/5v
UXPKDEiB7HQqivwQRte3R89xDPKq3NAYyIjSEVQ128OzIsXw4uZY9dc6bAs9zaRV
P6QvH6UuanW4bfAuX9lGMQG9wW7xy3bUUEaYsa/dnNePR0Ohs3XZNUi9AoGAbgHI
C3pQfeeMxLbnmvrRVapOAb3n/l2LH6R+sMoCpqpfqtkpCn1H545ps9dTz+2/I0vj
g9rjPlwHw8L9dcTRB27vFQKTrfUaJi44kbDbzGoC6y/yxvBmpe/6nJGd+7TXsICj
zEaMH2i3q9Of7QFGLGZOhIQH+dl/2ppRL1vPTh8CgYAqOu6Sj3sBcf6UD+FP5rhY
vLnbObIzr1HCKaMN/bu97dGm99V6EsAecdoAFNe4erALa0SqW2YhJqIN69VtOYF2
+UF9sO+71syBQMFkHFg61wWsn4ed0Y1ClsVjWpn98ohsiwPThZz7Wl/0SqPuIRAQ
pemGGu+y7JzeNOVsf5hbqA==
-----END PRIVATE KEY-----`
const text=`f7ICKl1E76qk8Yqi6FA531di9EutSpW+U0w4WYhjG6kpq57+wZ5aawp6EfWgztzsrhuEsy2u2yrx2DWJ6KZL3llAauK7Ahqz4GZXGOFJvgXpWy2+5NhEXigeepWuxEVkylpAoXCLRVBzeMoPVDN5HYrePPQjisoPaEMY7hram4n+w4LEmVatOLzmdKvEnGcqUC7cpuT6lc1uqqcVrQgnSA9VdOBhc7g9LZKGSvfJwFimX/dODdnAym//hAliH8KuNjPGJZmlJ7TtIxx0FnSqAvIMBYJbghSsDkAKG8kpNUd17yMeBWYoNtXPkUOwtZZ2fsyr1Tss7oJoycRxbb/8Ow==`
var prvKey = jsrsasign.KEYUTIL.getKey(key);
var decJava = jsrsasign.KJUR.crypto.Cipher.decrypt(jsrsasign.b64utohex(text), prvKey,'RSAOAEP256');
lixianbin1 commented 1 year ago

This is my decryption through the online website, which can be successful 企业微信截图_16799772913150

xezzon commented 1 year ago

Please try to encode the content to be encrypted as Base64 or Hex.

xezzon commented 1 year ago

It seems that this problem occurs when the plaintext is too long.

kjur commented 1 year ago

It seems that this problem occurs when the plaintext is too long.

Message shall be smaller than your key size.

xezzon commented 1 year ago

Whether segmented decryption is supported or will be supported soon?

kjur commented 1 year ago

Whether segmented decryption is supported or will be supported soon?

There is no plan to support it because openssl pkeyutl encryption doesn't support it too.

cat largefile.zip | openssl pkeyutl -encrypt -pubin -inkey a.pub > encrypted.dat
Public Key operation error
80C5A90001000000:error:0200006E:rsa routines:
ossl_rsa_padding_add_PKCS1_type_2_ex:data too large for key size:crypto/rsa/rsa_pk1.c:129: