在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字段傳遞給服務器進行認證。
下一篇vue教程濾鏡交流