[英]Byte[] Array to String C# to Java Without Encoding
[英]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.