首页 > 解决方案 > React Native 中的 RSA 加密和 JAVA 中的解密(Spring Boot)

问题描述

在过去的两天里,我一直在尝试在 React Native 中加密 RSA 中的字符串以进行客户端加密,并在服务器端在 JAVA(Spring Boot)中对其进行解密,但找不到任何帮助。我正在使用 4096 位密钥,如下所示。


sampleText = 12345678901234567890123456789012 ---> 4096 位 RSA 的 32 个字符

私钥

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


公钥

MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw0oK7B/7LmQp39Ieo1Dwi5vEXwmmwNTJMmuwlhY33Bxl76W0DIE+zf2gBbfGnEmvz+OIDuavJRqhOXfNu3+7xAZ9CTJPhZ+A8Q/fupRqrT7xBShKsZAR+14ftVMJ5l/DrmE+KnGHZRAOAyuSvnjEws83ZW/ZruvfdTV5OFUZOxSZRyVr7iFpsjhIiiwCdWDjyp/0cKPo+kEZHRS/T0Q+pzQ65fT8A+a5lUO74/Uhe/OscUVYfb0x+ZAcN+0ef3cxmC9yCpLxzT6rM5OMhyJEH4LdYQQjehZdvzohrrppqPr0KoTbz28LtWZBPKjCH+Mnd1LlgT3Dn3qI6jbiasCt9XpWyTn7VaixWn0ust+wtvzQjQfa+XcFnLwWT6I39i30jbqD1GRLItrFAkIicLaH9MVPw4z2qmWV9dKoHSSKmN0WbeZawSMZjmN9ZOS1zavoYkQ6gzLcnawgcmYoCLexhXFkQCj0oTCG01D1Wt1nypYOic4c8KDz1xu+32VuV3WWvql56Rq4CggvklbCV6O25TlF1Cogj7oVO5dk7rnEqevbbw68oD6dWd28+KVaGWH7WH8CZDQnLwpMSRtoUiuGjtKM5B+M7rhvdoYhdYhFMC6yTYN2EvbXESVSHsvwzI7bMFTK5AV8yPJzZN0BDwbP5FuZ+uJvhsVEwH/+09aCyCMCAwEAAQ==


我能够通过在 React Native 端使用 react-native-rsa-native npm 库进行加密和解密,方法是在 JAVA 端使用上述密钥对生成新的密钥对和相同的密钥对。但是当我在 React Native 端使用这个键时它不起作用。并且不能用统一的密钥对同步两端。此外,在 React Native 端生成的 RSA 密钥对看起来比上面提到的有点奇怪。

尝试使用以下 URL 对其进行测试: https ://www.devglan.com/online-tools/rsa-encryption-decryption 但这仅适用于 JAVA 端。

React Native Side Code:(不适用于此键)

RSA.generate()
  .then(keys => {
    console.log(keys.private) // the private key
    console.log(keys.public) // the public key
    RSA.encrypt(sampleText, keys.public)
      .then(encodedMessage => {
        RSA.decrypt(encodedMessage, keys.private)
          .then(message => {
            console.log(message)
          })
      })
  })

JAVA结束:

Cipher cipher = Cipher.getInstance(RSA_ECB_PKCS1PADDING);
cipher.init(Cipher.PRIVATE_KEY, loadPrivateKey(privateKey));
byte[] decryptedKey = cipher.doFinal(Base64.getDecoder().decode(cipherKey));
String s = new String(decryptedKey);  

我可以获得示例参考或任何帮助。谢谢你的时间。任何帮助都会得到帮助。

注意:也将在 Angular 10 中实现相同的客户端加密。

标签: javareact-nativeencryptionrsa

解决方案


推荐阅读