Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部分解密字符串&;这是胡言乱语_Java_Encryption_Derby_Bouncycastle - Fatal编程技术网

Java 部分解密字符串&;这是胡言乱语

Java 部分解密字符串&;这是胡言乱语,java,encryption,derby,bouncycastle,Java,Encryption,Derby,Bouncycastle,我使用的嵌入式Derby需要无填充和blockSize=8字节,以及Bouncy Castle 在以下代码中,问题是: 加密的字符串的byteArray长度为20字节。从DB检索到的byteArray长度为20字节,而encryptBlock值仅提供8字节的长度 即使是8个字节也是乱七八糟的 如何将IV嵌入密码文本 3.嵌入IV的一般方法是使用它预先修复加密文本,它不需要保密。正如名称所述,encryptBlock处理一个在您的情况下为8字节的块,因为您使用64位段初始化了CFBsize@Ar

我使用的嵌入式Derby需要
无填充
blockSize=8
字节,以及Bouncy Castle

在以下代码中,问题是:

  • 加密的
    字符串的
    byteArray
    长度为20字节。从DB检索到的
    byteArray
    长度为20字节,而
    encryptBlock
    值仅提供8字节的长度
  • 即使是8个字节也是乱七八糟的
  • 如何将IV嵌入密码文本

  • 3.嵌入IV的一般方法是使用它预先修复加密文本,它不需要保密。正如名称所述,
    encryptBlock
    处理一个在您的情况下为8字节的块,因为您使用64位段初始化了CFBsize@Artjom..Derby加密声明块大小应该是8字节…那么在这种情况下我应该如何解密所有数据?对不起,我不知道这段代码与Apache Derby有什么关系。AES的块大小为16字节。CFB模式可以将其转换为8字节的段大小。我看过一些文档,其中提到了DES和Blowfish,它们的块大小都是8字节。我不知道你想做什么,也不知道你为什么要写这段代码。@Artjom..谢谢…实际上Derby docs声明了块密码(BlockCipher,BitBlockSize)…我同意你的观点,问题在于密码初始化。。。
    private CFBBlockCipher cipher() {
    
        secureRandom = new SecureRandom(KEY);
        byte[] randomBytes = new byte[32];
        secureRandom.nextBytes(randomBytes);
    
        kgp = new KeyGenerationParameters(secureRandom, 256);
    
        ckg = new CipherKeyGenerator();
        ckg.init(kgp);
    
        sk = ckg.generateKey();
    
        /* Initialize cipher parameters....with key & the IV */
        cipherParameters = new ParametersWithIV(new KeyParameter(sk), IVBYTES); //IVYTES array
        /*3- Generate the encryption & decryption ciphers*/
        CFBB = CFBBlockCipher(new AESEngine(), BITBLOCKSIZE); //BITBLOCKSIZE =64bit
    
        byte[] cfbbMoneyOneCurrentIV = CFBB.getCurrentIV();
    
        /*4- initialize the cipher*/
        CFBB.init(true, cipherParameters);
    
        return CFBB;
    }
    
    private void resetCipher() {
        if (CFBB != null) {
            CFBB.reset();
        }
    }
    
    private byte[] encrypt(CFBBlockCipher CFBB,String stringOne) {
        this.CFBB=CFBB;
        /*1- get the stream data to be ciphered*/            
            stringOneByteArray = stringOne.getBytes(StandardCharsets.UTF_8);
    
            toSaveByteArray = new byte[stringOneByteArray.length];
            int encryptBlock = CFBB.encryptBlock(stringOneByteArray, 0, toSaveByteArray, 0);
            System.out.println("encryptBlock length is :"+encryptBlock);          
    
        resetCipher();
        return toSaveByteArray;
    }
    
    private InputStream decrypt(CFBBlockCipher CFBB) {
        this.CFBB=CFBB;
        //connect to DB, get column data/
        String getData = "select moneyEditor from settingsTable where id=1";
        try {
            stmtOne = conn.createStatement();
            boolean execute = stmtOne.execute(getData);
            rsOne = stmtOne.getResultSet();
            while (rsOne.next()) {
                rsByteArray = rsOne.getBytes("moneyEditor");
                if (rsByteArray != null) {
                    System.out.println("rsByteArray length is :" + rsByteArray.length);
    
                    toSaveDecryptByteArray = new byte[rsByteArray.length];
                    int decryptedByteArrayLength;
                    decryptedByteArrayLength = CFBB.decryptBlock(rsByteArray, 0, toSaveDecryptByteArray, 0);
                    System.out.println("decryptedByteArrayLength is :" + decryptedByteArrayLength);
                    isFromDecoded = new ByteArrayInputStream(toSaveDecryptByteArray);
    
                } else {
                    isFromDecoded = null;
                }
            }
            rsOne.close();
            resetCipher();
        } catch (SQLException ex) {
            Logger.getLogger(FrontFace.class.getName()).log(Level.SEVERE, null, ex);
        }
        return isFromDecoded;
    }