中文转url编码
之前遇到过的一个问题不知道是否能提供一些线索
没有,我现在知道原因,但是java代码不能修改,只能在C#中进行修改,但是封装的SHA1类只支持byte,不支持sbyte,不知道该怎么弄了
@百鸟朝凤: 你确定不是对中文解码时的编码UTF8/GB2312不同导致的么?
@John0King: 不是,又找到对方问了一下。文档里少写了一句,参数值要进行url编码,已经解决了
使用标准库:可以使用标准的加密库,例如 BouncyCastle,在 C# 和 Java 中都采用该库进行 SHA1 加密,从而保证加密结果一致。
C# 代码示例:
string data = "hello world";
byte[] bytes = Encoding.UTF8.GetBytes(data);
byte[] hash = new Org.BouncyCastle.Crypto.Digests.Sha1Digest().Digest(bytes);
string result = BitConverter.ToString(hash).Replace("-", "");
Java 代码示例:
String data = "hello world";
byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
byte[] hash = new org.bouncycastle.crypto.digests.SHA1Digest().digest(bytes);
String result = DatatypeConverter.printHexBinary(hash);
我们用了一下中文转url编码,就不存在这个问题了
用sha1来加密参数?你确定吗?sha1是散列加密算法,是不可逆的,你用这个来加密参数服务端怎么解密?
不用解密,加密的字符串作为一个参数传递过去,对面也做同样的加密,只要一样,就说明参数没有被篡改