gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:40:32 25 4
gpt4 key购买 nike

我有三个 Activity 。在MainActivity中,我有两个按钮,允许我从两个选项中进行选择,即单击加密转到EncryptActivity。 java 并单击decrypt 继续DecryptActivity.java

在第一个 Activity 中,即EncryptActivity,我正在加密用户在EditText中写入的消息。然后我按back按钮进入主菜单,然后单击decrypt按钮进入第二个 Activity DecryptActivity.java来解密消息并在 TextView 中打印消息。

但问题是,当我单击 DecryptActivity 中的 decrypt 按钮时,Textview 中没有打印任何内容。

EncryptActivity.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) {
}
}
});
}

}

DecryptActivity.java:

public class DecryptActivity extends AppCompatActivity {

EditText ed1;
TextView tv;
Button b1,b2;
byte[] decrypted;
String decryptedText = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.decrypt_activity);
ed1 = (EditText) findViewById(R.id.decrypteditText);
b1 = (Button) findViewById(R.id.decryptbutton);
b1.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Log.d("asd","inside onclick");
try {
Log.d("asd","inside try of decryptActivity");
KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");
SecretKey secretkey = keygenerator.generateKey();
Cipher cipher2 = Cipher.getInstance("Blowfish");
cipher2.init(Cipher.DECRYPT_MODE,secretkey);
Log.d("asd","in decrypt key is"+secretkey.toString());
Log.d("asd","before getBytes");
byte[] encrypted =ed1.getText().toString().getBytes();
Log.d("asd",ed1.getText().toString());
decrypted = cipher2.doFinal(encrypted);
tv=(EditText)findViewById((R.id.textView));
tv.setText("Asd");
Log.d("asd",new String(decrypted));
} catch (Exception e) {
}
Toast.makeText(getApplicationContext(), "Text Pasted", Toast.LENGTH_SHORT).show();
}
});
}

}

最佳答案

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

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

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

因此您正在尝试使用不同的 key 进行解密!根据定义,这是行不通的...

为了加密,您可以生成一个新 key ,但随后您必须保存它并再次使用它进行解密。

此外,您还犯了一个错误,即无法通过调用 byte[]toString() 方法将其转换为字符串。将其转换为十六进制或 base64 字符串,否则它将永远无法工作。

关于java - 加密消息但无法在 android 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38487481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com