java - 如何在 Android 上使用 SHA-256

标签 java android http hex sha

我需要加密我的 Android API 调用。我需要使用 SHA-256。

我已经尝试过 jokecamp.com 中的这个例子但它似乎不适用于Android 我还从commons.apache.org导入了Jar文件

这是我的代码:

package com.example.api_tester;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Hex;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Window;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    public static final String TAG = MainActivity.class.getSimpleName();
    APICall api;
    ApiSecurity hash_security;

    TextView url;
    TextView api_result;
    TextView url_call;
    private String hardCodedUrl = " MY API URL";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Hide Action Bar min target apit set to 11
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
        getActionBar().hide();
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate");

        ...

        test();

    }//end - onCreate




        private void test(){           
            try {
                String secret = "acbdef";
                String message = "api_key=abcd123&access_token=123abc";

                Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
                SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
                sha256_HMAC.init(secret_key);            

                String hash = Hex.encodeHexString(sha256_HMAC.doFinal(message.getBytes()));
                Log.e(TAG, "Result=> " + hash);
            }
            catch (Exception e) {
                Log.e(TAG, "Error=> " + e);
            }
        }//end test

    ...

这是我遇到的错误:

09-12 13:39:42.676: E/AndroidRuntime(13531): java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString

谢谢大家。

最佳答案

您正在使用Apache Commons Codec

String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(stringText);

对于 Java 执行此操作

MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes("UTF-8"));

关于java - 如何在 Android 上使用 SHA-256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802970/

相关文章:

java - 如何在旧的 java 文件中添加 Netbeans 许可证头?

android - 不同颜色的布局

android - 使用动态文件名获取 SQLite 数据库备份

php - 重定向时提供成功消息的最佳方式?

python - 使用 wget -c 功能在 Python 中使用 urllib 下载文件

java - OkHttp MockWebServer 重启时接受连接失败

java - jvm 中的 pop 和 pop2 指令有什么区别?

java - 是否有任何开源库可以获取java bean的getters的所有值?

java - float 和整数 EditText

javascript - 为什么我必须一般指定任何 HTTP 状态代码?它有什么好处?