繁体   English   中英

JSP(Java):编码字节数组,并在JavaScript中与C#相同

[英]JSP(Java): Encoding byte array and use in JavaScript same in C#

我在C#.net中使用此代码将质询发送到网页。

        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        Byte[] rnd = new Byte[64];
        rng.GetBytes(rnd);
        hidChallenge.Value = Encoding.Unicode.GetString(rnd);

而且我在Java脚本中使用它。

var base64str = document.getElementById("<%=hidChallenge.ClientID %>");

运行和调试时:

base64str =  感≗좦短䗅燛梻脕冔춇噙풣訋詇蹘᧩쾏휇᯸늸䫐顨◣希ࠟ䠎ᐷ

但是在Java(JSP)中

我使用以下代码:

Random r = new Random();
byte[] rndbyte = new byte[64];
r.nextBytes(rndbyte);
String challenge = new String(rndbyte,StandardCharsets.UTF_16LE);                    
session.setAttribute("challenge", challenge);

并且在javascript中:

var base64str =퓻 ꦖ쁳春꼪ꝝ䣇͋ꟼ鱐䆺㺪᠁郷̣攺줶ꋏ歮㏹㬎ꢔ崬魔弝孓翊

我也尝试遵循字符集:

US_ASCII

UTF_8

UTF_16

所以我得到基本64字符串错误。

听起来UTF-8 / 16或Ascii的用途与Base64之间存在混淆。

UTF-8用于将字符串编码为字节序列。 而Base64旨在将字节序列编码为字符串。

如果要用Java生成base64,则它应如下所示:

Random r = new Random();
byte[] rndbyte = new byte[64];
r.nextBytes(rndbyte);
String challenge = Base64.encodeBase64String(rndbyte);                    
session.setAttribute("challenge", challenge);

如果您想更多地了解这一点,那么这是另一篇文章,它很好地解释了它们之间的区别:UTF8 / UTF16和Base64在编码方面有何区别?

暂无
暂无

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

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