在我的 Android 应用程序中,我想实现 Diffie-Hellman 协议,以便在两个用户之间生成公共秘密。
我所做的如下:当第一个用户向第二个用户发送友谊请求时,应用程序会生成一个密钥对,将公共密钥存储在远程数据库中,将私有密钥存储在本地数据库中。
这是第一部分的代码:
generateKeys();
localDB.insertPrivateKey(userId, entityId, privateKey);
remoteDB.insertFirstPublicKey(userId, entityId, publicKey);
Run Code Online (Sandbox Code Playgroud)
生成密钥方法如下:
private void generateKeys() {
try {
final KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH");
keyPairGenerator.initialize(1024);
final KeyPair keyPair = keyPairGenerator.generateKeyPair();
privateKey = keyPair.getPrivate();
publicKey = keyPair.getPublic();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
当第二个用户接受请求时,会生成另一个密钥对,再次将私钥存储在本地数据库中,将公钥存储在远程数据库中。然后它从远程数据库获取第一个用户的公钥,将其转换回 PublicKey 并生成公共密钥。
这是第二部分的代码:
generateKeys();
localDB.insertPrivateKey(userId, entityId, privateKey);
remoteDB.insertSecondPublicKey(entityId, userId, publicKey);
String stringFirstPubKey = remoteDB.fetchFirstKey(entityId, userId);
PublicKey firstPubKey = stringToPublicKey(stringFirstPubKey);
byte[] commonSecret = generateCommonSecret(firstPubKey);
Run Code Online (Sandbox Code Playgroud)
stringToPublicKey 如下:
private PublicKey stringToPublicKey(String stringPubK) throws NoSuchAlgorithmException, InvalidKeySpecException { …Run Code Online (Sandbox Code Playgroud)