首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的BC的XTEA实现不能工作,为什么?

我的BC的XTEA实现不能工作,为什么?
EN

Stack Overflow用户
提问于 2012-06-30 07:50:35
回答 1查看 556关注 0票数 0

Bouncy castle已经使用XTEAEngine类提供了XTEA加密。类属性如下所示:

代码语言:javascript
复制
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类的全部代码,在更改的增量处将其命名为XTEAEngine2。但现在加密不能像预期的那样工作:

代码语言:javascript
复制
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]

在我改变之前,一切都很好:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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,但同样的事情也发生了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-30 08:01:41

0x9E3779B90x61C88647的两个互补否定;这在我看来是加法和减法在某处互换。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11270293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档