Androidアプリ(API 23)でハッシュ値を生成しようとしています。私はこのリンクに続きました。https://developer.android.com/reference/javax/crypto/Mac.htmlとそれ以下のコードはそれに従って動作するはずです。Android APIのHmacSHA256アルゴリズム
Mac hmacSha256 = Mac.getInstance("HmacSHA1");
しかし、これは私が検索し、他のStackOverflowの記事全体からいくつかのソリューションを試みたが、彼らはdidnの時間エラー -
java.security.NoSuchAlgorithmException
をコンパイルできます仕事はありません。
試してみました - MessageDigest digest = MessageDigest.getInstance("SHA-256");
同じエラーが発生しました。
私の全体的な意図は、私は私のAndroidの中でそれを使用することができますJavaでC#コードの下に変換することですので、私はちょうどつもりですし、ステップバイステップで、これで立ち往生手動で各ラインを変換
string GenerateAuthToken(string verb, string resourceType, string resourceId, string date, string key, string keyType, string tokenVersion)
{
var hmacSha256 = new System.Security.Cryptography.HMACSHA256 { Key = Convert.FromBase64String(key) };
verb = verb ?? "";
resourceType = resourceType ?? "";
resourceId = resourceId ?? "";
string payLoad = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}\n{1}\n{2}\n{3}\n{4}\n",
verb.ToLowerInvariant(),
resourceType.ToLowerInvariant(),
resourceId,
date.ToLowerInvariant(),
""
);
byte[] hashPayLoad = hmacSha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(payLoad));
string signature = Convert.ToBase64String(hashPayLoad);
return System.Web.HttpUtility.UrlEncode(String.Format(System.Globalization.CultureInfo.InvariantCulture, "type={0}&ver={1}&sig={2}",
keyType,
tokenVersion,
signature));
}
をAPP-ポイント。私はこの作品を作ることができるすべてのアイデア?
'MessageDigest.getInstance( "SHA-256")であるべきだろう'正常に動作し、参照します。https:// githubの.com/commonsguy/cwac-security/blob/v0.8.0/security/src/main/java/com/commonsware/cwac/security/SignatureUtils.java#L41-L46 – CommonsWare
@CommonsWareそれを試しましたが、同じ例外があります –
例外を示す完全なJavaスタックトレースと、例外をトリガーするコードを入力してください。 – CommonsWare