3.2.7 AlgorithmParameters
AlgorithmParameters类是一个引擎类,它提供密码参数的不透明表示。
不透明表示与透明表示的区别在于:
·不透明表示:在这种表示中,不可以直接访问各参数域,只能得到与参数集相关联的算法名及该参数集的某类编码。
·透明表示:用户可以通过相应规范类中定义的某个“get”方法来分别访问每个值。
//提供密码参数不透明表示。
public class AlgorithmParameters
extends Object
❑方法详述
可以通过getInstance()工厂方法实例化AlgorithmParameters对象,如下所示:
通常,我们使用如下方法获得实例化对象:
//返回指定算法的AlgorithmParameters对象。
public static AlgorithmParameters getInstance(String algorithm)
当然,我们可以同时指定算法的相应提供者来完成实例化操作,可使用如下方法:
//返回指定算法的AlgorithmParameters对象。
public static AlgorithmParameters getInstance(String algorithm, Provider provider)
//返回指定算法的AlgorithmParameters对象。
public static AlgorithmParameters getInstance(String algorithm, String provider)
完成对象实例化后,需要对其进行初始化:
//使用在paramSpec中指定的参数初始化此AlgorithmParameters对象。
public final void init(AlgorithmParameterSpec paramSpec)
//根据参数的基本解码格式导入指定的参数字节数组并对其解码。
public final void init(byte[]params)
//根据指定的解码方案从参数字节数组导入参数并对其解码。
public final void init(byte[]params, String format)
AlgorithmParameters对象只能被初始化一次,无法重用。
在上述init()方法中,我们看到AlgorithmParameterSpec参数,它是加密参数的(透明)规范接口,位于java.security.spec包中,其接口内部无任何方法,仅用于将所有参数规范分组,并为其提供类型安全。所有参数规范都必须实现此接口。
在完成初始化后,可通过以下方法获得参数对象的规范:
//返回此参数对象的(透明)规范。
public final<T extends AlgorithmParameterSpec>T getParameterSpec(Class<T>paramSpec)
我们可以通过以下方法获得算法参数:
//返回基本编码格式的参数。
public final byte[]getEncoded()
//返回以指定方案编码的参数。
public final byte[]getEncoded(String format)
此外,AlgorithmParameters类提供了以下常用方法:
//返回与此参数对象关联的算法的名称。
public final String getAlgorithm()
//返回此参数对象的提供者。
public final Provider getProvider()
//返回描述参数的格式化字符串。
public final String toString()
❑实现示例
我们通过代码清单3-7来展示如何使用AlgorithmParameters类获得算法参数。
代码清单3-7 构建DES算法参数
//实例化AlgorithmParameters,并指定DES算法。
AlgorithmParameters ap=AlgorithmParameters.getInstance("DES");
//使用BigInteger生成参数字节数组。
ap.init(new BigInteger("19050619766489163472469").toByteArray());
//获得参数字节数组。
byte[]b=ap.getEncoded();
/打印经过BigInteger处理后的字符串,将会得到与"19050619766489163472469"相同的字符串/
System.out.println(new BigInteger(b).toString());
上述字符串(19050619766489163472469)是作者通过AlgorithmParameterGenerator类操作得到的,并不是随意填写的一个数值。