【问题标题】:Encrypting a string with PublicKey + Base64 encryption使用 PublicKey + Base64 加密对字符串进行加密
【发布时间】:2012-10-25 01:30:41
【问题描述】:

我有一个字符串格式的 RSA 公钥,我想使用与 Base 64 相同的字符串加密一个字符串。这是我为此使用的代码:

function encrypt(String pin){ 
  String key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiOnM5t6w2ZD6dpA4/MzSTAOt0IYpnsmGSAIfIVgGntI+fI4wbvUvMIhaLN3fHrjyuNGFdYw+yuoXYkapajt6VTZJniaatSiq6bwQ7R0UAop6haFSAwjnmReqexJvcKyqUsTfcfFypPpsYRewh/48/jmc/6ND+ugxDd52prkPUrbj+nnO0z3DBoUCpgDMRvW2hWXv6kZ654gp+wIAQnxbdwRMy6FZbrHjkA3tc6U0CHK+KjxAfzWAK+yI+ofskM4qk50J7y9hUZ7lLikqWZWKiqh8xiDk1kgu+FIjVh+fylKpa3gWmPPn0fSpBJjuenc1OQVmZ718a3388DjzFlYOLwIDAQAB";
  byte[] sigBytes2 = Base64.decode(key, Base64.DEFAULT);
  Log.d("WS", "new key is: " + key);
  try {
    PublicKey publicKey = KeyFactory.getInstance("RSA")
        .generatePublic(new X509EncodedKeySpec(sigBytes2));
    encryptedBase64PIN = encode(publicKey, pin);
    Log.d("WSA", "encoded key is: " + encryptedBase64PIN);
    // getSecToken();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

public static String encode(Key publicKey, String data)
    throws NoSuchAlgorithmException, NoSuchPaddingException,
    InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

  byte[] byteData = data.getBytes(); // convert string to byte array

  Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");       
  cipher.init(Cipher.ENCRYPT_MODE, publicKey);      
  byte[] encryptedByteData = cipher.doFinal(byteData);

  String s = Base64.encodeToString(encryptedByteData, Base64.NO_WRAP);
  return s; // convert encrypted byte array to string and return it
}

当我将相同的输出发送到服务器时,它显示“无法解密 PIN”。这是为什么呢?

【问题讨论】:

  • 您的顶级方法不是有效的 Java。你的意思是public void 你在哪里输入了function
  • 是的,它被剪切-复制错误:D

标签: android encryption rsa public-key


【解决方案1】:

当我将相同的输出发送到服务器时,它显示“无法解密 PIN”。这是为什么呢?

这可能有很多个原因。如果您有服务器解密的代码,请将其添加到您的问题中。

原因可能包括:

  • 错误的加密模式。您选择了RSA/ECB/NoPadding,但服务器可能期待别的东西?

  • Base64 编码 - 服务器肯定会这样吗?

  • 消息是“无法解密 PIN”。如果您要加密的data 是 PIN,您确定要加密 ASCII 字节吗?

【讨论】:

  • 另外请记住,使用 PKCS1Padding 对原始 RSA 加密存在多种攻击,因此请重新考虑使用它。
猜你喜欢
  • 2023-03-14
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多