【问题标题】:Getting no output for BASE64Encoder()BASE64Encoder() 没有输出
【发布时间】:2014-04-21 16:05:31
【问题描述】:

我已经对程序的每个步骤进行了很多测试,我得到了输出,但是当我测试 BASE64Encoder() 行时它不起作用,我完全卡住了,即使 Eclipse 在 BASE64Encoder() 行上没有显示任何错误,我想要你的帮助如何摆脱这个问题, 代码如下

private void findMeaning(HttpServletResponse resp,String plainText) throws NoSuchAlgorithmException, 
    InvalidKeySpecException, 
    NoSuchPaddingException, 
    InvalidKeyException,
    InvalidAlgorithmParameterException, 
    UnsupportedEncodingException, 
    IllegalBlockSizeException, 
    BadPaddingException, 
    IOException{ 
        String text = plainText;
        String key="ezeon8547";
        KeySpec keySpec = new PBEKeySpec(key.toCharArray(), salt, iterationCount);//working
        SecretKey key1 = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);    //working    
         // Prepare the parameter to the ciphers
        AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);

        ecipher = Cipher.getInstance(key1.getAlgorithm());//working
        ecipher.init(Cipher.ENCRYPT_MODE, key1, paramSpec);//working      
        String charSet="UTF-8";       
        byte[] in = text.getBytes(charSet);//working
        byte[] out = ecipher.doFinal(in);//working

        String encStr=new sun.misc.BASE64Encoder().encode(out);//unknown error
          sendResponse(resp, "Pincode city:" +encStr);//not get output
    }

【问题讨论】:

  • 它对我有用,是的,我知道我不应该使用它。您是否收到表示异常的“未知错误”,如果有,该怎么办?还是你只得到一个空字符串?
  • 我测试了每一行都能正常工作,但是当我想要字符串值 encStr 时,它对我不起作用 未知错误不输出,甚至代码@EJP 中没有显示异常问题
  • 你不是很清楚。 “未知错误”是什么意思?你得到输出的“Pincode city:”部分吗?这可能根本不是 Base64 问题,只是 I/O 问题。
  • @EJP 当我通过删除 httpservletresponse 在桌面上运行该程序时,它正在工作和加密,但是当我在 google appengine 中部署它并提供它没有输出的字符串时

标签: java arrays jakarta-ee servlets servlet-3.0


【解决方案1】:

该解决方案可能通过不使用任何 Sun 类来解决。 Sun 类(即与 JRE 一起分发的具有 sun.* 包名称的类)不是 Java API 的一部分,不应使用。使用 Guava、Apache Commons Codec 或 Bouncy Castle 轻量级 API 执行解码。

例如,使用org.apache.commons.codec.binary.Base64.decodeBase64(String)

如果您想坚持使用普通的 Java API,请使用java.util.Base64(Java 8 以上)或根据this question 的答案使用javax.xml.bind.DatatypeConverter

【讨论】:

  • 我可以写什么来代替 sun 内部类@owlstead
  • 在答案中添加指向 Apache 编解码器的链接。 Guava 区分大小写,而 Bouncy 是一个非常大的库。 Java 类要么是特定于 XML 的,要么只能从 Java 8 开始使用。
  • 它们是 Sun 类,但它们不是“内部类”。
  • @EJP 嗯,是的。嗯。你当然是对的。我应该称它们为 Sun 实现类吗?通常我只会说你不应该使用sun.* 类,但是Sun 已经用sun.* 包创建了一些API,尽管这些API 没有随JRE 一起分发。
  • @owlstead 我认为您将内部 sun 软件包与分布在 com.sun 下的库混淆了——后者可以使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2021-04-10
  • 2015-05-11
  • 2018-03-19
  • 2021-02-08
  • 2021-12-29
相关资源
最近更新 更多