【问题标题】:Creating a Key object from byte array in Java/Kotlin在 Java/Kotlin 中从字节数组创建 Key 对象
【发布时间】:2021-04-17 16:38:57
【问题描述】:

我有一个这样生成的 EC 密钥对:

 KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
 kpg.initialize(256);
 KeyPair kp = kpg.generateKeyPair();

由于一些问题,我需要将此密钥对中的密钥作为字节数组发送。

我获取字节数组的方式就是调用:

val keyBytes = kp.public.encoded

我的目标是使用这个字节数组重建这个确切的密钥。

我试过了:

val kf = KeyFactory.getInstance("EC")
val pkSpec = X509EncodedKeySpec(keyBytes)
val publicKey = kf.generatePublic(pkSpec)

我的问题是 publicKey.encoded 字节数组与 keyBytes 数组不同。这是没有意义的。我认为这是因为这条线:

val pkSpec = X509EncodedKeySpec(keyBytes)

但我找不到任何关于此的好信息。

【问题讨论】:

    标签: java kotlin encoding cryptography key


    【解决方案1】:

    您可以使用 KeyFactory 从您的字节数组中创建密钥,请查看以下示例:

    import java.util.Arrays;
    import java.security.KeyPair;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.KeyPairGenerator;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    import java.security.KeyFactory;
    
    public class Demo {
        public static void main(String[] args) throws Exception{
            // Generate Keys
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
            kpg.initialize(256);
            KeyPair keyPair = kpg.generateKeyPair();
            PublicKey publicKey = keyPair.getPublic();
            PrivateKey privateKey = keyPair.getPrivate();              
    
            // The other side
            KeyFactory keyFactory = KeyFactory.getInstance("EC"); 
            PublicKey publicKey2 = keyFactory.generatePublic(new X509EncodedKeySpec(publicKey.getEncoded()));
            PrivateKey privateKey2 = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKey.getEncoded()));
           
            // Validation
            System.out.println(Arrays.equals(publicKey2.getEncoded(), publicKey.getEncoded()));
            System.out.println(Arrays.equals(privateKey2.getEncoded(), privateKey.getEncoded()));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2020-06-17
      相关资源
      最近更新 更多