gpt4 book ai didi

java - BigInteger -> byte[] -> BigInteger。看起来相等但 if 语句失败

转载 作者:行者123 更新时间:2023-12-02 05:35:25 31 4
gpt4 key购买 nike

我正在考虑为自己存储公钥的想法。为此,我需要将 BigInteger 转换为某种变量,然后从该值重新创建 BigInteger。

我在 Stackoverflow 中进行了搜索,找到了执行此操作的最佳方法是使用 byte[]。

这是我在 Eclipse 中的代码:

import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPublicKey;

public class Vaja2 {
public static void main(String[] args){
try {

// Create RSA Keypair (to obtain a BigInteger)
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keypair = kpg.generateKeyPair();

// Extract the public key
RSAPublicKey publicKey = (RSAPublicKey) keypair.getPublic();

// Get the public Exponent from the public key, I have BigInteger now.
BigInteger pkPublicExBI = publicKey.getPublicExponent();

//Try this: BigInteger -> byte-> BigInteger
byte[] pkModByte = pkPublicExBI.toByteArray();
BigInteger pkPublicExBIrecreated = new BigInteger(pkModByte);


// Show Results
System.out.println("Original BigInteger: " + pkPublicExBI);
System.out.println("Recreated BigInteger: " + pkPublicExBIrecreated);

if (pkPublicExBI == pkPublicExBIrecreated) {
System.out.println("\nThey are equal");
}
else {
System.out.println("\nThey are NOT equal");
}


} catch (Exception e) {
// Nothing happens
}

}
}

这是 Eclipse 控制台中显示的结果。

Original BigInteger:    65537
Recreated BigInteger: 65537

They are NOT equal

if 语句告诉我,两个 BigInteger 不相等。然而在控制台中,我看到它们都等于 65537。

我的问题:

  1. 为什么“if”语句失败?

  2. 您建议我如何使代码与众不同。假设该程序将要求将公钥存储在 notepad.exe 或类似的文本编码程序中(将使用 ASCII)。

最佳答案

比较对象时使用.equals()而不是==== 将比较对象的引用,而 .equals() 将检查它们是否具有相同的值。由于两个对象很少有相同的引用,因此除了比较基本类型(int、char,但 String 不是基本类型!)之外,永远不要使用 ==,其中没关系。

所以你想要:

if (pkPublicExBI.equals(pkPublicExBIrecreated)) {

而不是

if (pkPublicExBI == pkPublicExBIrecreated) {

关于java - BigInteger -> byte[] -> BigInteger。看起来相等但 if 语句失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25017930/

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