加密Android

我正在尝试理解在Android设备上列出所有支持的加密算法的代码。 我只是想知道为什么有必要添加(’Alg.Alias’)步骤并从服务名称中删除这些字符? 应用程序在没有它的情况下停止工作,我不明白为什么!

package com.example.lab_enc_dec;

import java.security.Provider; import java.security.Security; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import com.example.lab_enc_dec.R; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ListCryptoAlgorithms extends Activity { static final String TAG = "ListCryptoAlgorithms"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.algorithm_list); ListSupportedAlgorithms(); } public void ListSupportedAlgorithms() { String result = ""; // get all the providers Provider[] providers = Security.getProviders(); for (int p = 0; p < providers.length; p++) { // get all service types for a specific provider Set ks = providers[p].keySet(); Set servicetypes = new TreeSet(); for (Iterator it = ks.iterator(); it.hasNext();) { String k = it.next().toString(); k = k.split(" ")[0]; if (k.startsWith("Alg.Alias.")) k = k.substring(10); servicetypes.add(k.substring(0, k.indexOf('.'))); } // get all algorithms for a specific service type int s = 1; for (Iterator its = servicetypes.iterator(); its.hasNext();) { String stype = its.next(); Set algorithms = new TreeSet(); for (Iterator it = ks.iterator(); it.hasNext();) { String k = it.next().toString(); k = k.split(" ")[0]; if (k.startsWith(stype + ".")) algorithms.add(k.substring(stype.length() + 1)); else if (k.startsWith("Alg.Alias." + stype +".")) algorithms.add(k.substring(stype.length() + 11)); } int a = 1; for (Iterator ita = algorithms.iterator(); ita.hasNext();) { result += ("[P#" + (p + 1) + ":" + providers[p].getName() + "]" + "[S#" + s + ":" + stype + "]" + "[A#" + a + ":" + ita.next() + "]\n"); a++; } s++; } } TextView tv = (TextView)findViewById(R.id.supp_alg_result); tv.setText(result); } } 

别名是已在不同名称下注册的现有算法的别名。 这些名字的前缀是"Alg.Alias." 在列表中,可以将它们与初始注册区分开来。 但是,您不应在各种JCE类(如CihpergetInstance方法中使用"Alg.Alias" 。 因此该列表删除了"Alg.Alias." 从服务名称。