使用DESede CBC NoPadding在Decryption上获得相同的价值

时间:2013-07-12 19:43:58

标签: java encryption des

我被要求验证加密是否正常。我得到238字节的输入十六进制文本。要求使用DESede / CBC / NoPadding算法。我也有加密值。当然,我也给了密钥(给定两个字节。添加第三个字节作为第一个字节的副本,使其成为三个字节)

(238字节+ 2字节填充)

问题是:我的代码中的加密值与给定的加密值不完全匹配(只有前56个字节匹配)。

我所做的是:解密给定的加密值和从我的代码生成的加密值。这两个解密值都与给定输入匹配。

这意味着,我有两个加密值,解密后的值相同。

使用Zeros的InitialVector。(8个零字节)。

有人可以投光吗?我相信我错过了一些东西。谢谢你的帮助。

使用javax.crypto.Cipher.getInstance获取Cipher实例。使用SecretKeyFactory和DESedeKeySpec类生成密钥

编辑:

public String encrypt(byte[] sourceDataInBytes, String keyInHex, String cryptoMode, String cryptoPadding)
    {
Cipher des3cipher = null;
IvParameterSpec ivParamSpec = null;
String transformation = "DESede"+"/"+ cryptoMode+"/"+cryptoPadding;
byte[] encryptedDataInBytes = null;
try{
    des3cipher = Cipher.getInstance(transformation);
        Key key = generate3DESKey(keyInHex);
    if(cryptoMode.equalsIgnoreCase("CBC"))  
        {
            ivParamSpec = new IvParameterSpec(INITIAL_VECTOR_SALT);
            des3cipher.init(CYPHER_ENCRYPT_MODE, key, (AlgorithmParameterSpec)ivParamSpec );
        }else{
        des3cipher.init(CYPHER_ENCRYPT_MODE, key);
        }

        if(cryptoPadding.equals("NoPadding")){'
    sourceDataInBytes = addPadding(sourceDataInBytes, 8);
    }
        encryptedDataInBytes = des3cipher.doFinal(sourceDataInBytes);
    }catch(Exception e){
e.printStackTrace();
    }
return encryptedDataInBytes ;
}

public Key generate3DESKey(String srcInHex)
{
Key key = null;
if(src != null)
{
    byte[] bk = null;
    try{
        bk = hexStringToByte(src + src.length==32 ? src.substring(0,16) : ""));

        DESedeKeySpec des3KeySpec = new DESedeKeySpec(bk);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        key =  keyFactory.generateSecret(des3KeySpec);

    }catch(Exception e){
        e,printStyackTrace();
    }

}
return key;
}

0 个答案:

没有答案