小编el_*_*gio的帖子

实现DH协议时出现java.security.InvalidKeyException

在我的 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)

java android cryptography diffie-hellman java-security

5
推荐指数
0
解决办法
375
查看次数