【问题标题】:How to add custom encryption in Netty 4?如何在 Netty 4 中添加自定义加密?
【发布时间】:2020-06-15 21:39:51
【问题描述】:

我有一个使用 Netty 4 构建的应用程序,需要添加自定义加密实现。 推荐的方法是什么?

以 echo 应用为例 (https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/echo) 我想在管道中添加一个独立的处理程序来加密/解密内容。

【问题讨论】:

  • 能否请您在您的问题中添加更多详细信息,例如示例代码、加密应用程序中的内容等。否则此问题将被否决并关闭

标签: netty


【解决方案1】:

您只需为加密部分实现自己的ChannelOutboundHandler,为解密部分实现自己的ChannelInboundHandler。然后将其添加到ChannelPipeline。也就是说,我认为滚动自己的加密通常不是一个好主意,而且 99% 的情况下,最好重用已经存在的东西。

【讨论】:

  • 我正在重写一个 C 应用程序的服务器端,它使用旧协议,有超过 20,000 个客户端,所以我正在重用现有的东西!
【解决方案2】:

按照 Norman Maurer 的建议,我编写了这个管道:

public class MyServerInitializer extends ChannelInitializer<SocketChannel> {

  @Override
  public void initChannel(SocketChannel ch) throws Exception {
    ChannelPipeline pipeline = ch.pipeline();

    pipeline.addLast(new LengthFrameDecoder());
    pipeline.addLast(new CryptoDecoder());
    pipeline.addLast(new HeaderDecoder());
    pipeline.addLast(new StringDecoder());

    pipeline.addLast(new LengthPrepender());
    pipeline.addLast(new CryptoEncoder());
    pipeline.addLast(new HeaderEncoder());
    pipeline.addLast(new StringEncoder());

    pipeline.addLast(new MyServerHandler());
  }
}

public class CryptoDecoder extends ByteToMessageDecoder {

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        out.add(decrypt(in));
    }

    private ByteBuf decrypt(ByteBuf data) {
        return CryptoUtil.decrypt(data);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2011-10-13
    相关资源
    最近更新 更多