从字符串到字节数组再到字符串

时间:2014-03-05 07:38:52

标签: java string encryption cryptography

我正在尝试模拟RSA加密和解密我希望加密方法

  1. 取字符串
  2. 将其转换为byte []
  3. 执行RSA功能(我将在以下代码中显示)
  4. 将byte []作为字符串
  5. 返回

    我现在拥有的东西,它的工作原理是接收和返回byte [](不是字符串)

       public byte[] encrypt (byte[] message){
    
       byte [] t= ((new BigInteger(message)).modPow(e, N)).toByteArray();
    
      return (t);
    
    }
    

    我希望它的解密方法

    1. 从encrypt()
    2. 接收返回的字符串
    3. 将其转换为byte []
    4. 在byte []上执行RSA以获取原始字节[]
    5. 返回原始字符串 我到现在为止所做的事情

          public byte [] decrypt (byte [] message) {
      
           byte[] data= ((new BigInteger(message)).modPow(d, N)).toByteArray();
      
           return data;
            }
      
    6. 这两种方法有效,但是我需要在我的主类中创建一个byte []并使用byte [] Str.getbyte()来加密和新的String(byte [])来加密......

      我希望我的主要只处理字符串。当我使用这样的decrypt(String message)代码时

          public String decrypt (String message) {
      
             byte[] data= ((new BigInteger(message.getBytes())).modPow(d, N)).toByteArray();
      
          return data.toString();
          } 
      

      它没有像解密(byte []消息那样)给我原始文本,但它返回类似B@79f0a8b

      的内容

      我确定我错过了将文本转换为byte []的相关内容,反之亦然,但我不确定我错过了什么。

      我很乐意听取您的意见。

      (对不起我的英文)

1 个答案:

答案 0 :(得分:1)

加密结果的字符串值的原因是什么?您可以轻松地将byte []转换为String并在尝试搜索时将其反转:byte[] to String java。 但是真的有理由去做吗?

也许你想要这样的东西:

public byte[] encrypt (String message);
public String decrypt (byte[] message);

然后你将使用字符串输入进行操作,并且能够获得字符串解密结果。但是没有理由用字符串中的加密数据进行操作,它看起来像冗余操作:你的字符串将是不可读的,算法与byte []一起工作。只需转换加密输入和解密输出。