在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字段传递给服务器进行认证。