想象一下,我有一个用Java实现的网页,可以在http://mycompany.com/page1.xhtml?trafficSource=someTrafficSourceIdentifier&checkSum=...
获得。
我想跟踪不同流量来源(例如不同的广告系列)产生的网页访问次数。为此,我有trafficSource
参数。该组流量来源ID限制为5个可能的值(例如Google自然,Google AdWords,YouTube,Facebook,Twitter)。
想象一下,我想确保trafficSource
没有被篡改(没有人放置不同的值)。为此,我引入了checkSum
参数。
为字符串X(checkSum = f(X)
)创建校验和的最简单方法是什么,以便将不同的输入字符串转换为不同的校验和?
此措施的目的是检查我的参数基本。
我尝试使用以下内容,但它会生成一个包含非字母数字字符的字节数组,我无法将其放入网址中。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class CheckSumGenerator {
public String calculateCheckSum(final String aInput) throws NoSuchAlgorithmException {
final MessageDigest md = MessageDigest.getInstance("SHA");
final byte[] checkSumBytes = md.digest(aInput.getBytes());
final String result = new String(checkSumBytes);
return result;
}
}
答案 0 :(得分:1)
您可以从http请求标头获取服务器端的引荐来源,这对用户是不可见的。这可以识别来自youtube或facebook的访客。
要解决将哈希值转换为字母数字字符串的问题,可以将结果字节转换为十六进制代码。
final String result = DatatypeConverter.printHexBinary(checkSumBytes);