加密消息但无法在android中解密

时间:2016-07-20 17:51:45

标签: java android encryption cryptography

我正在进行三项活动。在MainActivity中,我有两个按钮,允许我从两个选项中进行选择:点击encrypt转到EncryptActivity.java并点击{{1}继续decrypt

在第一项活动中。 DecryptActivity.java,我正在加密用户在EncryptActivity中写入的消息。然后我按EditText按钮转到主菜单,然后点击back按钮进入第二个活动decrypt以解密消息并在文本视图中打印消息。

但问题是当我点击DecryptActivity.java中的decrypt按钮时,DecryptActivity中没有任何内容打印出来。

EncryptActivity.java:

Textview

}

DecryptActivity.java:

public class EncryptActivity extends AppCompatActivity {

EditText ed1;
Button b1;

private ClipboardManager myClipboard;
private ClipData myClip;
KeyGenerator keygenerator;
static SecretKey secretkey;

Cipher cipher;
byte[] encrypted;
String encryptedText = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.encrypt_activity);
    ed1 = (EditText) findViewById(R.id.editText);
    b1 = (Button) findViewById(R.id.button);
    myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String text = ed1.getText().toString();//now encrypt the message
            try {
                keygenerator = KeyGenerator.getInstance("Blowfish");
                secretkey = keygenerator.generateKey();
                Log.d("asd", secretkey.toString());
                cipher = Cipher.getInstance("Blowfish");
                cipher.init(Cipher.ENCRYPT_MODE, secretkey);
                encrypted = cipher.doFinal(text.getBytes());
                encryptedText = encrypted.toString();
                myClip = ClipData.newPlainText("text", encryptedText);
                myClipboard.setPrimaryClip(myClip);

                Toast.makeText(getApplicationContext(), "Text Copied", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
            }
        }
    });
}

}

1 个答案:

答案 0 :(得分:1)

当使用像Blowfish这样的对称krypto算法时,加密和解密必须使用相同的密钥 - 否则解密将失败。

在您的情况下,您在加密前生成一个随机密钥,并在解密之前再次生成:

 KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");
 SecretKey secretkey = keygenerator.generateKey();

因此,您尝试使用其他密钥进行解密!根据定义,这不起作用......

对于加密,您可以生成新密钥,但之后您必须保存并再次使用它进行解密。

此外,您错误地认为byte[]无法通过调用toString()方法转换为字符串。将它转换为十六进制或base64字符串,否则它将无法工作。