首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DESede/ECB/NoPadding,Base64

DESede/ECB/NoPadding,Base64
EN

Stack Overflow用户
提问于 2017-11-02 12:45:37
回答 1查看 1.8K关注 0票数 0

我得到了一条使用DESede/ECB/NoPadding加密的Base64消息和一个密钥模式。在StackOverflow中,我在相同的主题上使用了所有可能的解决方案,但都没有起作用。我认为问题应该是字符串字节转换。但是,我在代码中找不到它。我应该提一提,我对实用密码学还不熟悉。

以下是我的代码:

代码语言:javascript
复制
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;

public class Main {

private static final String ALGO_NAME = "DESede/ECB/NoPadding";
private static final char[] HEX_DIGIT = { '0', '1', '2', '3', '4', '5',
        '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}


public static void main(String[] args) throws Exception {

    String defKey = "CA:FE:BA:BE:FF:FF:FF:FF:XY:XY+1:XY+2:XY+3:XY+4:XY+5:FF:FF:WZ:WZ+1:WZ+2:WZ+3:WZ+4:WZ+5:FF:FF";
    String encryptedText = "6t8Z5bKl5ybJL+MiFerNBmiTDS7wlTEUdWNwJJApWmQ=";
    byte[] input = Base64.getDecoder().decode(encryptedText);

    for (int i = 0; i < 251; i++)
        for (int j = 0; j < 251; j++) {
            String[] split = defKey.split(":");
            for (int k = 0; k < 6; k++) {
                String a = HEX_DIGIT[(i + k) / 16] + "" + HEX_DIGIT[(i + k) % 16];
                split[8 + k] = a;
                a = HEX_DIGIT[(j + k) / 16] + "" + HEX_DIGIT[(j + k) % 16];
                split[16 + k] = a;
            }

            String secretKey = "";
            for (String q: split) {
                secretKey += q;
            }

            DESedeKeySpec keySpec = new DESedeKeySpec(hexStringToByteArray(secretKey));
            SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
            SecretKey key = factory.generateSecret(keySpec);


            Cipher cipher = Cipher.getInstance(ALGO_NAME);
            cipher.init(Cipher.DECRYPT_MODE, key);

            byte[] plainText = cipher.doFinal(input);
            String decrypted = new String (plainText);

            if (decrypted.toLowerCase().contains("the"))
                System.out.println(decrypted);
        }
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-02 20:48:45

问题是边界,我把它改为256,它起作用了。如果XY是FF,那么XY +1将是00,依此类推。

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

https://stackoverflow.com/questions/47075678

复制
相关文章

相似问题

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