Bouncy城堡已經使用XTEAEngine類提供了XTEA加密。 類屬性是這樣的:我爲BC的XTEA實現不起作用,爲什麼?
private static final int rounds = 32,
block_size = 8,
key_size = 16,
delta = 0x9E3779B9,
d_sum = 0xC6EF3720; // sum on decrypt
但封閉源代碼的C++應用程序使用以下設置(與32輪):
uint32 delta = 0x61C88647; uint32 sum = 0xC6EF3720;
因此,要改變它,我已經複製的整個代碼BC XTEAEngine類,在更改的delta處將其命名爲XTEAEngine2。但現在預期加密不起作用:
arr given : [11, 0, 10, 8, 0, 72, 105, 32, 116, 104, 101, 114, 101, 0, 0, 0]
arr encrypted: [-128, -26, -32, 17, 7, 98, 80, -112, 26, -83, -11, 47, -124, -50, -80, 59]
arr decrypted: [-106, 62, 110, -40, -56, -58, 18, -101, -38, -73, -83, 95, 18, -99, -84, -37]
我改變一切之前罰款:
arr given : [11, 0, 10, 8, 0, 72, 105, 32, 116, 104, 101, 114, 101, 0, 0, 0]
arr encrypted: [89, -95, -88, 120, -117, 39, 57, -126, 23, -74, 35, 105, -23, -7, -109, -27]
arr decrypted: [11, 0, 10, 8, 0, 72, 105, 32, 116, 104, 101, 114, 101, 0, 0, 0]
而且我使用BouncyCastle的XTEA這樣的:
BlockCipher engine = new XTEAEngine[2]();
BufferedBlockCipher cipher = new BufferedBlockCipher(engine);
KeyParameter kp = new KeyParameter(keyArr);
private byte[] callCipher(byte[] data)
throws CryptoException {
int size =
cipher.getOutputSize(data.length);
byte[] result = new byte[ size ];
int olen = cipher.processBytes(data, 0,
data.length, result, 0);
olen += cipher.doFinal(result, olen);
if(olen < size){
byte[] tmp = new byte[ olen ];
System.arraycopy(
result, 0, tmp, 0, olen);
result = tmp;
}
return result;
}
public synchronized byte[] encrypt(byte[] data)
throws CryptoException {
if(data == null || data.length == 0){
return new byte[0];
}
cipher.init(true, kp);
return callCipher(data);
}
public synchronized byte[] decrypt(byte[] data)
throws CryptoException {
if(data == null || data.length == 0){
return new byte[0];
}
cipher.init(false, kp);
return callCipher(data);
}
是任何人都能夠指出我的錯誤?因爲我相信我在某個地方創造了一個。 我甚至用維基百科的算法規範完全實現了XTEA,但同樣的事情發生了。
你確定它不是封閉的源應用程序有問題嗎? –
我100%確定。已有開源應用程序使用該封閉源應用程序的反向引擎協議,並且封閉源客戶端與開放源代碼服務器協同工作。 –