当前位置: 首页 > 知识库问答 >
问题:

SSLEngine unwrap()javax.crypto.BadPaddingException:坏记录MAC

仰翰采
2023-03-14
    public void read(SelectionKey key,ByteBuffer readBuffer) throws IOException, BadPaddingException {

    SocketChannel socketChannel = (SocketChannel) key.channel();

    ByteBuffer clientSSLData = ByteBuffer.allocate(getPacketBufferSize());
    System.out.println("Reading data. PacketBufferSize: "+(getPacketBufferSize()));
    int length = socketChannel.read(clientSSLData);

    System.out.println("read "+length+" bytes");
    if (length == -1){
        System.out.println("Length is -1 which means nothing was read from the channel  ");
        socketChannel.close();
        return;
    }
    clientSSLData.flip();
    readBuffer.clear();
    SSLEngineResult res = sslEngine.unwrap(clientSSLData, readBuffer);
    System.out.println(res.toString());
}

编辑:异常是...

javax.net.ssl.SSLException:在sun.security.ssl.alerts.getsslException(未知源)在sun.security.ssl.sslengineimpl.fatal(未知源)在sun.security.ssl.sslengineimpl.readRecord(未知源)在sun.security.ssl.sslengineimpl.readRecord(未知源)在sun.security.ssl.sslengineimpl.unwrap(未知源)在在ssl.engine.impl.channelhandler.run(channelhandler.java:69)在java.lang.thread.run(未知源)由:javax.crypto.BadPaddingException:sun.security.ssl.engininputrecord.decrypt(未知源)的坏记录MAC.

共有1个答案

傅元章
2023-03-14

你做错了。当您需要获取数据时,您应该:

  1. 从应用程序接收器缓冲区获取。
  2. 如果为空,请尝试unwrap().
  3. 如果这导致缓冲区下溢,请读取通道。

同样,当您需要放置数据时,您应该:

 类似资料:
  • 问题内容: 这已经让我发疯了几天。我使用SSL引擎使用java nio和ssl加密创建了一个客户端。握手可以正常工作,我向网站写入GET请求,并且工作正常(我获得了包含200个代码的标头)。问题是,当网站将数据包发回时,在第二个数据包上,我收到BadPaddingException。这是我的读取方法: 我的获取请求很简单,例如:“获取\ r \ n主机:www.google.com \ r \ n

  • 为了记录请求和响应,我添加了一个LoggingRequestInterceptor,它实现了ClientHTTPPrequestinterceptor。。。 响应主体是一个流,如果我将其读取到我的拦截器中,TestRestTemplate将无法将其反序列化到我的对象模型中。换句话说,当我调用testRestTemplate时。获取…我将始终获取空对象(即使我看到对象我的响应)。 要解决RestTe

  • 记录 限制记录 条记录 (每页) 如果你想全局地限制在网格或外键数据选择时每页显示的记录数,可勾选这个选项。否则,所有记录将会显示在一页里。 【注意】若要为特定的表或集合调整设置,请参阅数据查看器。 自动开始事务 如果你需要在更改表或集合中的记录时,自动开始一个新事务,可勾选这个选项。否则,自动提交会自动启用,你需要在数据查看器中点击 “开始事务”按钮来手动开始事务。 在数据查看器中打开事务时,可

  • 记录 限制记录 条记录 (每页) 如果你想全局地限制在网格每页显示的记录数,可勾选这个选项。否则,所有记录将会显示在一页里。 【注意】若要为特定的表或集合调整设置,请参阅数据查看器。 自动开始事务 如果你需要在更改表或集合中的记录时,自动开始一个新事务,可勾选这个选项。否则,自动提交会自动启用,你需要在数据查看器中点击 按钮来手动开始事务。 在数据查看器中打开事务时,可以使用 或 按钮来提交或回滚

  • 记录 限制记录 条记录 (每页) 如果你想全局地限制在网格或外键数据选择时每页显示的记录数,可勾选这个选项。否则,所有记录将会显示在一页里。 【注意】若要为特定的表或集合调整设置,请参阅数据查看器。 自动开始事务 如果你需要在更改表或集合中的记录时,自动开始一个新事务,可勾选这个选项。否则,自动提交会自动启用,你需要在数据查看器中点击 “开始事务”按钮来手动开始事务。 在数据查看器中打开事务时,可

  • 问题内容: 我想在我的应用程序中将slf4j + logback用于两个目的-日志和审计。 对于日志记录,我以常规方式记录日志: 对于审计,我创建一个特殊的命名记录器并登录到它: 登录配置: 问题:通过审核记录器记录的消息出现两次-一次在AUDIT_LOGGER下,一次在根记录器下。 14:41:57.975 [main]调试com.gammay.example.Main–> main() 14: