你能弄清楚为什么这个程序会触发 IllegalStateException 吗?

2023-12-21

可以找到 ~/Cipher/nsdl/crypto 中的所有文件here http://nsdeleon.wikispaces.com/file/detail/crypto.zip用gcj编译的java文件,参见compile.sh

nmint@nqmk-mint ~/Cipher/nsdl/crypto $ echo test | ./cryptTest encrypt deadbeefdeadbeefdeadbeefdeadbeef deadbeef Blowfish CBC > test
null
Exception in thread "main" java.lang.IllegalStateException: cipher is not for encrypting or decrypting
   at javax.crypto.Cipher.update(libgcj.so.81)
   at javax.crypto.CipherOutputStream.write(libgcj.so.81)
   at nsdl.crypto.BlockCrypt.encrypt(cryptTest)
   at nsdl.crypto.cryptTest.main(cryptTest)

块加密.java:

package nsdl.crypto;

import java.io.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;

public class BlockCrypt {
Cipher ecipher;
Cipher dcipher;
byte[] keyBytes;
byte[] ivBytes;
SecretKey key;
AlgorithmParameterSpec iv;
byte[] buf = new byte[1024];

BlockCrypt(String keyStr, String ivStr, String algorithm, String mode) {
    try {
        ecipher = Cipher.getInstance(algorithm + "/" + mode + "/PKCS5Padding");
        dcipher = Cipher.getInstance(algorithm + "/" + mode + "/PKCS5Padding");

        keyBytes = hexStringToByteArray(keyStr);
        ivBytes = hexStringToByteArray(ivStr);

        key = new SecretKeySpec(keyBytes, algorithm);
        iv = new IvParameterSpec(ivBytes);

        ecipher.init(Cipher.ENCRYPT_MODE, key, iv);
        dcipher.init(Cipher.DECRYPT_MODE, key, iv);
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

public void encrypt(InputStream in, OutputStream out) {
    try {
        // out: where the plaintext goes to become encrypted
        out = new CipherOutputStream(out, ecipher);

        // in: where the plaintext comes from
        int numRead = 0;
        while ((numRead = in.read(buf)) >= 0) {
            out.write(buf, 0, numRead);
        }
        out.close();
    } catch (IOException e) {
        System.err.println(e.getMessage());
    }
}

public void decrypt(InputStream in, OutputStream out) {
    try {
        // in: where the plaintext come from, decrypted on-the-fly
        in = new CipherInputStream(in, dcipher);

        // out: where the plaintext goes
        int numRead = 0;
        while ((numRead = in.read(buf)) >= 0) {
            out.write(buf, 0, numRead);
        }
        out.flush();
        out.close();
    } catch (IOException e) {
        System.err.println(e.getMessage());
    }
}
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;
}
}

cryptTest.java:

package nsdl.crypto;

import nsdl.crypto.BlockCrypt;

public class cryptTest {

public static void main (String args[]) {
    if (args.length != 5) {
        System.err.println("Usage: cryptTest (encrypt|decrypt) key iv algorithm mode");
        System.err.println("Takes input from STDIN. Output goes to STDOUT.");
    } else {
        String operation = args[0];
        String key = args[1];
        String iv = args[2];
        String algorithm = args[3];
        String mode = args[4];
        BlockCrypt blockCrypt = new BlockCrypt(key, iv, algorithm, mode);
        if (operation.equalsIgnoreCase("encrypt")) {
            blockCrypt.encrypt(System.in, System.out);
        } else if (operation.equalsIgnoreCase("decrypt")) {
            blockCrypt.decrypt(System.in, System.out);
        } else {
            System.err.println("Invalid operation. Use (encrypt|decrypt).");
        }
    }
}
}

密码,ecipher,未初始化,并且它抛出一个IllegalStateException当您尝试使用它时,就好像它是在ENCRYPT_MODE.

注意你的catch构造函数中的块BlockCrypt。它捕获一个没有消息的异常,并打印“null”到System.err。您可以继续航行,而不是中止执行(也许通过从构造函数抛出异常)。

更换System.err.println(e.getMessage()) with e.printStackTrace()或者至少System.err.println(e)应该给你更多细节。我的猜测是ecipher.init()抛出异常,因为您提供的是 32 位 IV 而不是 64 位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能弄清楚为什么这个程序会触发 IllegalStateException 吗? 的相关文章

  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • MSDeploy自动加密连接字符串,在字典中找不到密钥

    Since 网络部署 3 5 https blogs iis net msdeploy archive 2013 07 09 webdeploy 3 5 rtw aspx使用以下标志支持连接字符串的自动加密 EnableRule Encry
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • 如何从 mysql 表中转储 blob 字段

    我正在尝试从 mysql 表中转储 BLOB 字段 但是当我使用 sqlYog 转储 blob 记录时 我得到了无价值的数据 如何备份 BLOB 类型字段 Note BLOB 字段有图像 参数 十六进制斑点当您打算将其导入到另一个数据库 如
  • 枚举与强类型枚举

    我是 C 编程的初学者 今天遇到一个新话题 强类型enum 我已经研究了一些 但到目前为止我无法找出为什么我们需要这个以及它有什么用 例如 如果我们有 enum xyz a b c a 0 b 1 c 2 Typical C format
  • matplotlib:直方图和 bin 标签

    I m trying to plot a histogram with bar chart and I m having difficulties figuring out how to align the x axis labels wi
  • 按住按键时 Swing 中的文本输入字段在 OS X 上停止工作

    我发现 OS X Yosemite 使用 Oracle JDK 8 上的 Swing 文本输入字段存在一个奇怪的问题 当我在文本输入字段获得焦点时按住任何字母或数字键时 我之后就无法再在当前 JFrame 的任何字段中输入任何内容 然后我必
  • 直接在浏览器中使用 jquery/flash 录制网络摄像头视频?

    我想让用户通过网络摄像头录制视频 然后通过浏览器将录制的视频上传到网站 这是一个完全按照我希望的网站工作方式工作的示例 只不过它似乎不捕获视频 而只是捕获图像 http www xarg org project jquery webcam
  • 新版本 Hibernate 的 hibernate3-maven-plugin 依赖项

    我想将 hibernate 3 5 1 Final 与此插件一起使用 这里我的依赖项应该是什么 它似乎正在拿起一组旧的罐子 但现在失败了
  • 无法获取项目参考的依赖项

    我有一个包含网站项目和 C 库的 C 解决方案 编译解决方案时 网站给出消息 无法获取项目引用 MyLibrary 的依赖项 当此错误消息使构建失败时 这不会停止网站编译和运行 直到我尝试使用 TFS 构建来构建它 这是什么意思 我该如何解
  • 我如何在 VBA 中调用 WebView2 和其他现代 winmd 功能

    我想在旧式 VBA 用户窗体中嵌入现代 WebView2 组件 Edge Chromium 浏览器控件 我推测我需要在系统上安装以下内容 Edge Chromium 浏览器 Webview2 SDK 虽然我安装了 Edge Chromium
  • 提交日志增长的问题

    我有一台机器 提交日志不断增加到 7 8 GB 并且仍在增长 我检查了一个属性commitlog total space in mb 8192这是在 cassandra yaml 中注释的 我怀疑它必须是默认的 1 增加提交日志大小有什么问
  • Spark 结构化流 - 对不同的 GroupBy 键使用不同的 Windows

    目前 我通过 Spark 结构化流媒体读取 Kafka 主题后得到了下表 key timestamp value key1 2017 11 14 07 50 00 0000 10 key1 2017 11 14 07 50 10 0000
  • 将 DataFrameGroupBy 对象中的每个分组列转换为列表

    这是数据 df pd DataFrame date 1 1 2 2 2 3 3 3 4 5 request 2 2 2 3 3 2 3 3 3 3 users 1 3 7 1 7 3 4 9 7 9 count 1 1 2 3 1 3 1
  • 无效的视图状态、Base-64 字符数组或字符串的长度无效

    我时不时会遇到这个错误 ExecuteStep at line 0 at Column 0 状态信息对此页无效 并且可能已损坏 无效的视图状态 内部异常 Application Error 中未处理的异常 在加载行 0 和列 0 Base
  • 动态链接和动态加载有什么区别

    我认为 动态加载意味着在加载或运行时将库 或任何其他二进制文件 加载到内存中 因此 在下面的程序中 当 dlopen 调用的动态加载器将出现时 如果库尚未加载 它将把库加载到内存中 动态链接是指在加载或运行时完成的链接 它解决了外部引用 因
  • Laravel TokenMismatchException 会话超时

    我遇到一个问题 当用户闲置超过 24 小时 我的会话超时 或者离开网站并在 24 小时后返回时 他们不会从网站注销 但他们的会话正在被注销已过期 或者至少他们的 token 不再有效 这会导致不必要的行为 就好像用户在 token 过期后提
  • MAC:Mono Helloworld 示例

    我在 OSX Yosemite 上全新安装了 Mono 并尝试了以下示例http www mono project com docs getting started mono basics http www mono project com
  • eclipse 上“资源”目录放在哪里

    我的项目是一个 Eclipse Java 项目 它的结构是 游戏 src 游戏 资源 但这段代码返回一个异常 image new ImageIcon new URL resources Monster png java net Malfor
  • 在沙盒中哪里可以找到奇点定义文件

    我正在尝试学习奇点 所以我从他们的库中提取了这个例子 singularity pull library sylabsed examples lolcow 拉取后 我想检查该映像内的目录是什么 以及是否有任何用于构建映像的定义文件 因此我通过
  • 在网页上渲染 PDF

    我们正在尝试使用以下方式在网络浏览器中加载 pdf 文件pdf对象 http pdfobject com JavaScript API 目前我们尝试显示的 pdf 大小接近 10MB 这会导致网页上显示 PDF 时出现较长的延迟 同时下载完
  • Jackson无限循环多对一一对多关系

    我有两个模型 Parent id name childrenIds 1 parent1 1 2 2 parent2 3 Child id parentId 1 1 2 1 3 2 当我尝试使用 Jackson 序列化此模型时 发生堆栈溢出错
  • 你能弄清楚为什么这个程序会触发 IllegalStateException 吗?

    可以找到 Cipher nsdl crypto 中的所有文件here http nsdeleon wikispaces com file detail crypto zip用gcj编译的java文件 参见compile sh nmint n