繁体   English   中英

Base 64编码,Java还是JavaScript?

[英]Base 64 encoding, Java or JavaScript?

我有一个特定的js函数,它将一些表单输入加密到base64中,但是我需要在我的Java应用程序中运行它。 所以我的问题是,如何在Java类中调用该函数? 否则,我将不得不翻译它,但我认为它将更加复杂。 这是一些js代码:

function encode64(input)
{
      //alert(input);
      //alert(input);
      input = escape(input);
      var output = "";
      var chr1, chr2, chr3 = "";
      var enc1, enc2, enc3, enc4 = "";
      var i = 0;

      var nMod =( input.length) % 3;
      //alert(nMod);
      //alert(input.length);
      do 
      {
         chr1 = input.charCodeAt(i++);
         chr2 = input.charCodeAt(i++);
         chr3 = input.charCodeAt(i++);

         enc1 = chr1 >> 2;
         enc2 = (((chr1  << 4) | (chr2 >> 4))& 0x3f);
         enc3 = (((chr2  << 2) | (chr3 >> 6))& 0x3f);
         enc4 = chr3 & 0x3f;



         output = output + 
            keyStr.charAt(enc1) + 
            keyStr.charAt(enc2) + 
            keyStr.charAt(enc3) + 
            keyStr.charAt(enc4);
         chr1 = chr2 = chr3 = "";
         enc1 = enc2 = enc3 = enc4 = "";
      } while (i < input.length);

    if(nMod == 1)
    {
        chr1 = input.charCodeAt(i++);
        enc1 = ((chr1 & 192)>>2);
        enc2 = ((chr1 & 3) <<4);
        enc3 = "=";
        enc4 = "=";
        output = output + keyStr.charAt(enc1)
                + keyStr.charAt(enc2)
                + keyStr.charAt(enc3)
                + keyStr.charAt(enc4);
    }
    if(nMod == 2)
    {
        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        enc1 = ((chr1 & 192)>>2);
        enc2 = ((chr1 & 3) << 4 )|((chr2 & 0xf0) >> 4);
        enc3 = ((chr2 & 15) <<2);
        enc4 = "=";

        output = output + keyStr.charAt(enc1)
                + keyStr.charAt(enc2)
                + keyStr.charAt(enc3)
                + keyStr.charAt(enc4);
    }

      return output;
}

非常感谢!

或者更好地使用commons-codecBase64类

PS您不“加密”到Base64中-您“编码”

但我认为会更加复杂。

为什么会更复杂? 您可以使用Java完美地做到这一点。 如果您的实际问题已经是第一行

input = escape(input);

那么很高兴知道Java等效项是URLEncoder#encode() 至于编码的剩余部分,它最终将非常简单。 只需在这里和那里用Stringchar替换var ,根据java.lang.String API对齐方法,就可以了。

编辑 :这里有些令人讨厌的nitpickers:我没有说URLEncoder#encode()做Base64编码。 它只是以与Javascript的escape()函数相同的方式进行URL编码。 那只是他要翻译的Javascript代码的第一行。 阅读答案,请勿扫描答案。

您可以使用用Java编写javascript引擎来做到这一点,但我认为最好将其转换为Java更好。

我已经使用了http://iharder.sourceforge.net/current/java/base64/并且它可以工作。

将代码转换成Java-会更快。 (或搜索Java中的现有示例!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM