我想要一個C++版本的下列Java代碼。如何在openssl的BIGNUM中使用負數?
BigInteger x = new BigInteger("00afd72b5835ad22ea5d68279ffac0b6527c1ab0fb31f1e646f728d75cbd3ae65d", 16);
BigInteger y = x.multiply(BigInteger.valueOf(-1));
//prints y = ff5028d4a7ca52dd15a297d860053f49ad83e54f04ce0e19b908d728a342c519a3
System.out.println("y = " + new String(Hex.encode(y.toByteArray())));
這裏是我的解決方案的嘗試。
BIGNUM* x = BN_new();
BN_CTX* ctx = BN_CTX_new();
std::vector<unsigned char> xBytes = hexStringToBytes(「00afd72b5835ad22ea5d68279ffac0b6527c1ab0fb31f1e646f728d75cbd3ae65d");
BN_bin2bn(&xBytes[0], xBytes.size(), x);
BIGNUM* negative1 = BN_new();
std::vector<unsigned char> negative1Bytes = hexStringToBytes("ff");
BN_bin2bn(&negative1Bytes[0], negative1Bytes.size(), negative1);
BIGNUM* y = BN_new();
BN_mul(y, x, negative1, ctx);
char* yHex = BN_bn2hex(y);
std::string yStr(yHex);
//prints y = AF27542CDD7775C7730ABF785AC5F59C299E964A36BFF460B031AE85607DAB76A3
std::cout <<"y = " << yStr << std::endl;
(忽略此案。)我在做什麼錯了?如何讓我的C++代碼輸出正確的值「ff5028d4a7ca52dd15a297d860053f49ad83e54f04ce0e19b908d728a342c519a3」。我也嘗試通過做BN_set_word(negative1,-1)來設置negative1,但這也給我錯誤的答案。
'hexStringToBytes(「00' ...有一個奇怪的引號......希望這是一個複製粘貼錯誤,而不是實際上在您的源文件中 –
您嘗試過'BN_set_negative'嗎? –
嗯。 「AFD72B5835AD22EA5D68279FFAC0B6527C1AB0FB31F1E646F728D75CBD3AE65D」 – user299648