淘先锋技术网

首页 1 2 3 4 5 6 7

在Java中,sign和token是常用的安全认证机制。sign是指签名,是一种基于密钥的数字签名,可以验证通信数据的完整性和真实性。而token是指令牌,是一种基于令牌的身份认证机制,可以避免密码的明文传输和存储。

public static String sign(String content, String key) {
String encrypted = null;
try {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
mac.init(secretKeySpec);
byte[] actualMac = mac.doFinal(content.getBytes("UTF-8"));
encrypted = byte2hex(actualMac);
} catch (NoSuchAlgorithmException | UnsupportedEncodingException | InvalidKeyException e) {
e.printStackTrace();
}
return encrypted;
}

以上是一个简单的Java签名代码示例,其中content是要签名的内容,key是用于签名的密钥。使用HmacSHA256算法进行签名,最终将签名结果转换成十六进制字符串返回。在实际使用中,可以将签名结果与通信数据一起发送给服务器,服务器通过验证签名结果来确定通信数据的真实性。

而对于token认证,常用的方式是使用Json Web Token(JWT)。JWT是一种基于JSON的开放标准(RFC7519),用于在各个系统之间安全地传输声明内容。下面是一个Java JWT生成代码示例:

public static String createToken(String username, String[] roles, String secret) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
long expiresIn = 3600000L; 
Date expiresAt = new Date(nowMillis + expiresIn);
JwtBuilder jwtBuilder = Jwts.builder()
.setSubject(username)
.claim("roles", roles)
.setIssuedAt(now)
.setExpiration(expiresAt)
.signWith(SignatureAlgorithm.HS256, secret.getBytes());
return jwtBuilder.compact();
}

以上代码示例中,createToken方法接受三个参数:用户名、角色列表和用于签名的secret。使用JJWT库创建JwtBuilder对象,设置JWT的声明内容,包括sub(主题)、roles(角色列表)、iat(签发时间)和exp(过期时间),最后使用HS256算法和密钥对JWT进行签名。生成的token可以在HTTP头信息中作为Authorization字段传递给服务器进行认证。