2014-01-26 30 views
-1

我在android上使用spongycastle中的RSA进行加密/解密时出现问题。 enctext包含加密文本,而dectext包含解密后的文本。在调试器中,dectext与纯文本消息“test”相匹配,但当作为字符串传递给smssend(string,string)函数时,会显示一些未知格式。这里是代码。解密文本时遇到格式问题(Spongycastle)

{ 

    byte[] enctext; 
    byte[] dectext; 
    String message="test"; 

    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", "SC"); 
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SC"); 
    keyGen.initialize(1024, random); 
    KeyPair pair = keyGen.generateKeyPair(); 
    PrivateKey priv = pair.getPrivate(); 
    PublicKey pub = pair.getPublic(); 


    Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding","SC"); 
    rsaCipher.init(Cipher.ENCRYPT_MODE, pub); 
    enctext=rsaCipher.doFinal(message.getBytes()); 

    Cipher rsaCipher2 = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding","SC"); 
    rsaCipher2.init(Cipher.DECRYPT_MODE, priv); 
    dectext=rsaCipher2.doFinal(enctext); 
    sendSMS("5554",dectext.toString());// in debugger dectext shows equivalent "test" values in decimal but when passed as string to sendSMS func it shows some unknown format... 

    } 

    private void sendSMS(final String phoneNumber,String message) 
    { 
    } 

这是什么问题?这是一些格式问题?我应该使用哪种格式?

回答

0

代替

dectext.toString() 

要使用

new String(dectext) 

此外,你应该字节字符串之间进行转换时明确指定编码:

message.getBytes("UTF-8") 
new String(dectext, "UTF-8") 
+0

谢谢你,那工作对我:) – Eshaal

+0

我有另一个问题! String decstr = new String(dectext);工作完美,但是当我测试这个encstr = new String(enctext); byte [] new_encarr = encstr.getBytes();我在new_encarr中得到了相同的值:(,...我是编程新手......在学习阶段......你能帮忙吗 – Eshaal

+0

你是不是指同一个值,它是另一个对象(即'=='会给出错误),但是数组中包含的字节应该是相同的,我将用一个示例来扩展答案,以便使用明确的编码,这有助于解决不同计算机上字节的问题 – Henry