2017-01-28 39 views
0

我使用paillier密碼系統來加密和解密隨機數據,首先是字節數組的形式,然後我將它們轉換爲大整數,如果字節數組成爲負大整數,解密數字和輸入數字是不同的基本上它不適用於負大整數)。如果沒有檢查輸入是否正面或負面,有沒有辦法使這項工作成爲可能?pailler cryptosystem可以加密和解密負大整數嗎?

+0

如何將大整數轉換爲字節數組並返回? – kennytm

+0

我正在使用類似這樣的'BigInteger m1 = new BigInteger(data);'和'm1.toByteArray()',但我將其更改爲Maarten Bodewes在他的回答中提出的建議,因此biginteger總是正數 – LPepe

回答

0

不,你不能使用負數,因爲所有的東西都是模n計算的。

是的,您可以使用任何數組,只要該值在轉換爲數字時是小於n的數字。

爲此,您可以使用new BigInteger(1, plaintext)這將始終導致一個正數。第一個參數是符號。

您可能需要針對特定​​結構的編碼,例如對於最高有效位(消息 - >編碼 - >轉換爲數字 - > Paillier加密 - >編碼密文和解碼密文 - > Paillier解密 - >解碼 - >消息)具有零位值。

有關如何將數據編碼/解碼爲數字的示例,請參閱I2OSP和OS2IP。

+0

感謝它的工作方式就像我想要的 – LPepe