ウェブサービスを使用するには、Authorization
という名前のヘッダーの値を生成する必要があります。次のようにヘッダを生成するための手順は次のとおりです。SHA 256を使用したハッシングとAESを使用した暗号化
1. Hash Generation
HashValue = SHA2(username, password, id)
2. Auth Key Generation
Authkey = AES(Salt + anotherId + "=" + HashValue)
これらは、アルゴリズムの詳細です:
Algorithm - AES
Mode - ECB
Padding - PKCS5Padding
Secret key - someString
は今、私は上記の詳細と、文字列である秘密鍵を使用してAES暗号化を実行します。
暗号化の後、私は上記の暗号化された値をheader
として使用し、残りのサービスを呼び出します。
私はこれまでのところ、これを行っている:
String username = "username";
String password = "password";
String id = "123456";
String toBeHashed = username + password + id;
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] hashed = sha256.digest(toBeHashed.getBytes("UTF-8"));
String hashString = "=" + Base64.encodeBase64String(hashed);
System.out.println(hashString);
String salt = "salt";
String anotherId = "123";
byte[] forAuth = (salt + orgId + hashString).getBytes("UTF-8");
//Mocked "secret key". Original key string is of size 16 bytes.
byte[] secKey = "secret key".getBytes("UTF-8");
SecretKey secretKey = new SecretKeySpec(secKey, 0, secKey.length, "AES");
Cipher aesCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
aesCipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] authorizationKey = aesCipher.doFinal(forAuth);
System.out.println("-------------------");
System.out.println("-------------------");
System.out.println(Base64.encodeBase64String(authorizationKey));
をしかし、まだバックエンドサービスは、私の認証キーが無効であることを述べています。私が何かを逃しているかどうか教えてください。
AESキーは、長さが16,24、または32バイトなので、AESキーは原則として無効です。プロバイダーがこのような無効なキーを期待どおりに解釈しない可能性があります。 –
実際に私はここに秘密鍵を嘲笑している。元のキー文字列をバイトに変換して長さを取得しようとすると、それは16です。だから、それは問題ではないと思います。私はこの問題を編集します。 – v1shnu
(SHA-2は長さが異なります。2.エンコーディングはどのようにして行われますか?)Webサービスのドキュメント。不一致です(ハッシュ関数は正確に1つの入力を持ち、ブロック暗号は正確に2つの入力を持っています)。単にコードの例やより良い文書を要求してください。 –