模块  java.base
软件包  java.security

Class Signature


  • public abstract class Signature
    extends SignatureSpi
    Signature类用于为应用程序提供数字签名算法的功能。 数字签名用于数字数据的认证和完整性保证。

    签名算法可以是使用DSA和SHA-256的NIST标准DSA。 使用SHA-256消息摘要算法的DSA算法可以指定为SHA256withDSA 在RSA的情况下,签名算法可以被指定为例如SHA256withRSA 必须指定算法名称,因为没有默认值。

    Signature对象可用于生成和验证数字签名。

    使用Signature对象签名数据或验证签名有三个阶段:

    1. 初始化,使用其中之一
    2. 更新

      根据初始化的类型,这将更新要签名或验证的字节。 请参阅update方法。

    3. 在所有更新的字节上签名或验证签名。 请参见sign方法和verify方法。

    请注意,此类是抽象的,并且由于历史原因而从SignatureSpi扩展。 应用程序开发人员只应注意此Signature类中定义的方法; 超类中的所有方法都适用于希望提供自己的数字签名算法实现的加密服务提供者。

    需要Java平台的每个实现都支持以下标准Signature算法:

    • SHA1withDSA
    • SHA256withDSA
    • SHA1withRSA
    • SHA256withRSA
    这些算法在Java安全标准算法名称规范的Signature section中描述。 请参阅实现的发行文档,以了解是否支持任何其他算法。
    从以下版本开始:
    1.1
    • 字段详细信息

      • UNINITIALIZED

        protected static final int UNINITIALIZED
        可能的值为 state ,表示此签名对象尚未初始化。
        另请参见:
        常数字段值
      • SIGN

        protected static final int SIGN
        可能的 state值,表示此签名对象已初始化以进行签名。
        另请参见:
        常数字段值
      • VERIFY

        protected static final int VERIFY
        可能的值为 state ,表示此签名对象已初始化以进行验证。
        另请参见:
        常数字段值
      • state

        protected int state
        此签名对象的当前状态。
    • 方法详细信息

      • getInstance

        public static Signature getInstance​(String algorithm)
                                     throws NoSuchAlgorithmException
        返回实现指定签名算法的Signature对象。

        此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回一个新的Signature对象,该对象封装来自第一个支持指定算法的Provider的SignatureSpi实现。

        请注意,可以通过Security.getProviders()方法检索已注册提供商的列表。

        Implementation Note:
        JDK Reference Implementation还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()返回的提供程序顺序不同。
        参数
        algorithm - 请求的算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“签名”部分。
        结果
        新的 Signature对象
        异常
        NoSuchAlgorithmException - 如果没有 Provider支持指定算法的 Signature实现
        NullPointerException - 如果 algorithmnull
        另请参见:
        Provider
      • getProvider

        public final Provider getProvider()
        返回此签名对象的提供者。
        结果
        此签名对象的提供者
      • initVerify

        public final void initVerify​(PublicKey publicKey)
                              throws InvalidKeyException
        初始化此对象以进行验证。 如果使用不同的参数再次调用此方法,则会否定此调用的效果。
        参数
        publicKey - 将验证其签名的身份的公钥。
        异常
        InvalidKeyException - 如果密钥无效。
      • initVerify

        public final void initVerify​(Certificate certificate)
                              throws InvalidKeyException
        使用给定证书中的公钥初始化此对象以进行验证。

        如果证书的类型为X.509并且密钥用法扩展字段标记为严重,则密钥用法扩展字段的值意味着证书中的公钥及其对应的私钥不应用于数字签名, InvalidKeyException被抛出。

        参数
        certificate - 将验证其签名的身份证书。
        异常
        InvalidKeyException - 如果证书中的公钥未正确编码或不包含必需的参数信息或不能用于数字签名目的。
        从以下版本开始:
        1.3
      • initSign

        public final void initSign​(PrivateKey privateKey)
                            throws InvalidKeyException
        初始化此对象以进行签名。 如果使用不同的参数再次调用此方法,则会否定此调用的效果。
        参数
        privateKey - 将生成其签名的标识的私钥。
        异常
        InvalidKeyException - 如果密钥无效。
      • initSign

        public final void initSign​(PrivateKey privateKey,
                                   SecureRandom random)
                            throws InvalidKeyException
        初始化此对象以进行签名。 如果使用不同的参数再次调用此方法,则会否定此调用的效果。
        参数
        privateKey - 将生成其签名的标识的私钥。
        random - 此签名的随机源。
        异常
        InvalidKeyException - 如果密钥无效。
      • sign

        public final byte[] sign()
                          throws SignatureException
        返回更新的所有数据的签名字节。 签名的格式取决于底层签名方案。

        对此方法的调用会将此签名对象重置为之前通过调用initSign(PrivateKey)进行签名初始化时initSign(PrivateKey) 也就是说,如果需要,通过对updatesign新调用,对象被重置并可用于从同一签名者生成另一个签名。

        结果
        签名操作结果的签名字节。
        异常
        SignatureException - 如果未正确初始化此签名对象,或者此签名算法无法处理提供的输入数据。
      • sign

        public final int sign​(byte[] outbuf,
                              int offset,
                              int len)
                       throws SignatureException
        完成签名操作并将生成的签名字节存储在提供的缓冲区outbuf ,从offset开始。 签名的格式取决于底层签名方案。

        此签名对象将重置为其初始状态(调用其中一个initSign方法后所处的状态),并且可以重复使用以生成具有相同私钥的其他签名。

        参数
        outbuf - 签名结果的缓冲区。
        offset - 偏移到存储签名的 outbuf
        len - 为签名分配的 outbuf的字节数。
        结果
        放入 outbuf的字节数。
        异常
        SignatureException - 如果此签名对象未正确初始化,如果此签名算法无法处理提供的输入数据,或者 len小于实际签名长度。
        IllegalArgumentException -如果 outbufnull ,或 offsetlen小于0,或总和 offsetlen比的长度大 outbuf
        从以下版本开始:
        1.2
      • verify

        public final boolean verify​(byte[] signature)
                             throws SignatureException
        验证传入的签名。

        对此方法的调用会将此签名对象重置为之前通过调用initVerify(PublicKey)初始化以进行验证时initVerify(PublicKey) 也就是说,该对象被重置并可用于验证来自在initVerify的调用中指定了其公钥的标识的另一个签名。

        参数
        signature - 要验证的签名字节。
        结果
        如果签名已经过验证,则为true,否则为false。
        异常
        SignatureException - 如果此签名对象未正确初始化,则传入的签名编码不正确或类型错误,如果此签名算法无法处理提供的输入数据等。
      • verify

        public final boolean verify​(byte[] signature,
                                    int offset,
                                    int length)
                             throws SignatureException
        从指定的偏移量开始,验证指定字节数组中的传入签名。

        对此方法的调用会将此签名对象重置为之前通过调用initVerify(PublicKey)初始化以进行验证时initVerify(PublicKey) 也就是说,对象被重置并可用于验证来自在initVerify的调用中指定了其公钥的标识的另一个签名。

        参数
        signature - 要验证的签名字节。
        offset - 从字节数组开始的偏移量。
        length - 从偏移量开始使用的字节数。
        结果
        如果签名已经过验证,则为true,否则为false。
        异常
        SignatureException - 如果此签名对象未正确初始化,则传入的签名编码不正确或类型错误,如果此签名算法无法处理提供的输入数据等。
        IllegalArgumentException - 如果 signature字节数组是 null ,或者 offsetlength小于0,或者 offsetlength的总和大于 signature字节数组的长度。
        从以下版本开始:
        1.4
      • update

        public final void update​(byte b)
                          throws SignatureException
        更新要由字节签名或验证的数据。
        参数
        b - 用于更新的字节。
        异常
        SignatureException - 如果未正确初始化此签名对象。
      • update

        public final void update​(byte[] data)
                          throws SignatureException
        使用指定的字节数组更新要签名或验证的数据。
        参数
        data - 用于更新的字节数组。
        异常
        SignatureException - 如果未正确初始化此签名对象。
      • update

        public final void update​(byte[] data,
                                 int off,
                                 int len)
                          throws SignatureException
        使用指定的字节数组从指定的偏移量开始更新要签名或验证的数据。
        参数
        data - 字节数组。
        off - 从字节数组开始的偏移量。
        len - 从offset开始使用的字节数。
        异常
        SignatureException - 如果未正确初始化此签名对象。
        IllegalArgumentException -如果 datanull ,或 offlen小于0,或总和 offlen比的长度大 data
      • update

        public final void update​(ByteBuffer data)
                          throws SignatureException
        使用指定的ByteBuffer更新要签名或验证的数据。 处理data.remaining()字节,从data.position()开始。 返回时,缓冲区的位置将等于其限制; 它的限制不会改变。
        参数
        data - ByteBuffer
        异常
        SignatureException - 如果未正确初始化此签名对象。
        从以下版本开始:
        1.5
      • getAlgorithm

        public final String getAlgorithm()
        返回此签名对象的算法名称。
        结果
        此签名对象的算法名称。
      • toString

        public String toString()
        返回此签名对象的字符串表示形式,提供包含对象状态和所用算法名称的信息。
        重写:
        toString在课程 Object
        结果
        此签名对象的字符串表示形式。
      • setParameter

        @Deprecated
        public final void setParameter​(String param,
                                       Object value)
                                throws InvalidParameterException
        Deprecated.
        将指定的算法参数设置为指定的值。 该方法提供了一种通用机制,通过该机制可以设置该对象的各种参数。 参数可以是算法的任何可设置参数,例如参数大小,或用于签名生成的随机比特源(如果适当的话),或者是否执行特定但可选的计算的指示。 每个参数的统一算法特定命名方案是可取的,但此时未指定。
        参数
        param - 参数的字符串标识符。
        value - 参数值。
        异常
        InvalidParameterException - 如果 param是此签名算法引擎的无效参数,则该参数已设置且无法再次设置,发生安全性异常,依此类推。
        另请参见:
        getParameter(java.lang.String)
      • getParameters

        public final AlgorithmParameters getParameters()
        返回与此签名对象一起使用的参数。

        如果此签名先前已使用参数初始化(通过调用setParameter方法),则此方法返回相同的参数。 如果此签名尚未使用参数初始化,则此方法可能会返回默认和随机生成的参数值的组合(如果基础签名实现支持它并且可以成功生成它们)。 否则,返回null

        结果
        与此签名一起使用的参数,或 null
        从以下版本开始:
        1.4
        另请参见:
        setParameter(AlgorithmParameterSpec)
      • getParameter

        @Deprecated
        public final Object getParameter​(String param)
                                  throws InvalidParameterException
        Deprecated.
        获取指定算法参数的值。 该方法提供了一种通用机制,通过该机制可以获得该对象的各种参数。 参数可以是算法的任何可设置参数,例如参数大小,或用于签名生成的随机比特源(如果适当的话),或者是否执行特定但可选的计算的指示。 每个参数的统一算法特定命名方案是可取的,但此时未指定。
        参数
        param - 参数的字符串名称。
        结果
        表示参数值的对象,如果没有, null
        异常
        InvalidParameterException - 如果 param是此引擎的无效参数,或者在尝试获取此参数时发生另一个异常。
        另请参见:
        setParameter(String, Object)