(s3/how-to/sd-api-key/bang-cac-ngon-ngu)= # Sử dụng API key trên với các ngôn ngữ Với một số ngôn ngữ chưa hỗ trợ cung cấp bộ công cụ SDK, nhà phát triển phần mềm có thể dùng ngôn ngữ bất kỳ để generate ra API key(token) sau đó integrate với Sun S3 thông qua hệ thống Sun S3 Api. Bài viết sau sẽ hướng dẫn generate API key từ accessKey và secretKey. Sau khi có API key, người dùng có thể integrate với S3 bằng http api request. ## Java **Setup - Generate API key** ```{code-block} java private static String generateApiKey(String accessKey, String secretKey, String timeStamp) throws NoSuchAlgorithmException, UnsupportedEncodingException { char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); String stringToSign = secretKey + ":" + timeStamp; MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] encodedhash = digest.digest(stringToSign.getBytes(StandardCharsets.UTF_8)); byte[] hexChars = new byte[encodedhash.length * 2]; for (int j = 0; j < encodedhash.length; j++) { int v = encodedhash[j] & 0xFF; hexChars[j * 2] = (byte) HEX_ARRAY[v >>> 4]; hexChars[j * 2 + 1] = (byte) HEX_ARRAY[v & 0x0F]; } String hexString = new String(hexChars); String apikey = Base64Utils.encodeToString(String.format("%s:%s:%s", accessKey, timeStamp, hexString.toLowerCase()).getBytes(StandardCharsets.UTF_8)); return apikey; } ``` **Test Connection** ```{code-block} java String apikey = generateApiKey("","", ""); String url = "https://client-access.sunteco.vn/s3/v1/bucket?uniqcode="; HttpRequest.Builder b = HttpRequest.newBuilder(new URI(url)); b.header("api-key", apikey).GET(); HttpClient httpClient = java.net.http.HttpClient.newHttpClient(); HttpResponse response = httpClient.send(b.build(), HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); ``` ## JavaScript / Node.js / ReactJs/ TypeScript **Setup - Generate API key** ```{code-block} js const generateApiKey = (accessKey, secretKey, timestamp) => { const hashedKey = CryptoJS.SHA256(`${secretKey}:${timestamp}`).toString() const apikey = btoa(`${accessKey}:${timestamp}:${hashedKey}`, 'base64') return apikey } ``` ## Python **Setup - Generate API key** ```{code-block} python def generateApiKey(accessKey, secretKey, timeStamp): input = secretKey+':'+str(timeStamp) sha256endcoded = sha256(input.encode('utf-8')).hexdigest() message = accessKey+':'+str(timeStamp) + ':'+ sha256endcoded message_bytes = message.encode('utf-8') base64_bytes = base64.b64encode(message_bytes) api_key = base64_bytes.decode('utf-8') return api_key ``` ## Csharp **Setup - Generate API key** ```{code-block} csharp // Generate api key static string GenerateApiKey(string accessKey, string secretKey, string timestamp) { var hashedKey = ComputeSha256Hash(accessKey, secretKey, timestamp); var preEncodeString = System.Text.Encoding.UTF8.GetBytes(accessKey+":"+timestamp+":"+hashedKey); return System.Convert.ToBase64String(preEncodeString); } // Encrypt timestamp vs secret static string ComputeSha256Hash(string accessKey, string secretKey, string timestamp) { // Create a SHA256 using (SHA256 sha256Hash = SHA256.Create()) { // ComputeHash - returns byte array byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(secretKey+":"+timestamp)); // Convert byte array to a string StringBuilder builder = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) { builder.Append(bytes[i].ToString("x2")); } return builder.ToString(); } } ```