JSP(Java):编码字节数组并在JavaScript中使用,与C中相同#
我在C#.net中使用此代码将挑战发送到网页JSP(Java):编码字节数组并在JavaScript中使用,与C中相同#,java,c#,jsp,encoding,base64,Java,C#,Jsp,Encoding,Base64,我在C#.net中使用此代码将挑战发送到网页 RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); Byte[] rnd = new Byte[64]; rng.GetBytes(rnd); hidChallenge.Value = Encoding.Unicode.GetString(rnd); 我在java脚本中使用它 var base64str = do
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 %>");
但是在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=퓻�ꦖ쁳春꼪ꝝ䣇͋ꟼ鱐䆺㺪᠁郷̣攺줶ꋏ歮㏹㬎ꢔ崬魔弝孓翊
我也尝试跟随charset:
美国ASCII码
UTF_8
UTF_16
所以我得到了Base64字符串错误。听起来好像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);
如果你想了解更多,这里有另一篇文章可以很好地解释这一区别:
WTF?这不是base64。这是。。。好的,我已经看过了。如果两个字节在代理项范围内,则将中断。老实说,只需使用base64。
Random r = new Random();
byte[] rndbyte = new byte[64];
r.nextBytes(rndbyte);
String challenge = Base64.encodeBase64String(rndbyte);
session.setAttribute("challenge", challenge);