Java 如何在Android中加密/解密发送/接收的消息?
我们正在构建一个聊天客户端(如Whatsapp等),用于发送和接收私人消息。为了隐私起见,我们决定在消息到达和发送时对其进行加密和解密 我想我们可以使用RSA私钥和公钥进行加密。我知道我们通常需要两对钥匙,一对在服务器上,一对在电话上。这就引出了我在这里要问的一些问题Java 如何在Android中加密/解密发送/接收的消息?,java,android,encryption,rsa,privacy,Java,Android,Encryption,Rsa,Privacy,我们正在构建一个聊天客户端(如Whatsapp等),用于发送和接收私人消息。为了隐私起见,我们决定在消息到达和发送时对其进行加密和解密 我想我们可以使用RSA私钥和公钥进行加密。我知道我们通常需要两对钥匙,一对在服务器上,一对在电话上。这就引出了我在这里要问的一些问题 如何在android中生成密钥对 它们应该如何储存 服务器和客户端上的每个用户都需要不同的密钥对吗 请随意添加任何有用的信息,因为我是一个完全的安全新手。有许多加密/解密算法,如数据加密标准(DES)、Playfair等。 你可以
请随意添加任何有用的信息,因为我是一个完全的安全新手。有许多加密/解密算法,如数据加密标准(DES)、Playfair等。 你可以用那些。如果你愿意,做你自己的算法。我曾经制作过一个messenger应用程序,并制作了自己的加密/解密算法
您也可以选择使用对称或非对称密钥算法。。。继续工作,信使有一个很好的范围:) 有许多加密/解密算法,如数据加密标准(DES)、Playfair等。 你可以用那些。如果你愿意,做你自己的算法。我曾经制作过一个messenger应用程序,并制作了自己的加密/解密算法
您也可以选择使用对称或非对称密钥算法。。。继续工作,信使有一个很好的范围:) > P>你需要一个中央服务器,它为每个用户提供证书来验证用户(否则你将永远容易受到中间人攻击)。因此,对于两个用户(Joe和Sally),将有三个证书:1)验证中央服务器的证书,2)验证Joe的证书,3)验证Sally的证书 因此,当Joe想要与Sally开始沟通时,应发生以下情况:
public class Constants {
// encryption/decryption
public static String AES_KEY = "0366D8637F9C6B21";
public static byte[] IV_VECTOR = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
}
/**
* This class is used to decrypt an encrypted string value.
*
* @author kthakur
*
*/
public class EncryptDecrytData {
/**
* This method is used to encrypt a string value.
*
* @param text
* - string value to be encrypted.
*
* @return result(encrypted string) as String
*
* @throws Exception
*
*/
@TargetApi(8)
public static String encrytData(String text) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
byte[] static_key = Constants.AES_KEY.getBytes();
SecretKeySpec keySpec = new SecretKeySpec(static_key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(Constants.IV_VECTOR);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] results = cipher.doFinal(text.getBytes());
String result = Base64.encodeToString(results, Base64.NO_WRAP|Base64.DEFAULT);
return result;
}
/**
* This method is used to decrypt a string value.
*
* @param text
* - string value to be decrypted.
* @return result(decrypted string) as String
*
* @throws Exception
*/
@SuppressLint("NewApi")
public static String decryptData(String text)throws Exception{
byte[] encryted_bytes = Base64.decode(text, Base64.DEFAULT);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
byte[] static_key = Constants.AES_KEY.getBytes();
SecretKeySpec keySpec = new SecretKeySpec(static_key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(Constants.IV_VECTOR);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decrypted = cipher.doFinal(encryted_bytes);
String result = new String(decrypted);
return result;
}
}