2195 lines
126 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<div class="subTitle">
javax.crypto
</div>
<h2 class="title" title="Class Cipher">Class Cipher</h2>
</div><div class="contentContainer">
<ul class="inheritance">
<li><a href="../../java/lang/Object.html" title="class in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>javax.crypto.Cipher</li>
</ul> </li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>
已知直接子类:
</dt>
<dd>
<span><a href="../../javax/crypto/NullCipher.html" title="javax.crypto中的类">NullCipher</a></span>
</dd>
</dl>
<hr/> <br/> <pre>public class <span class="typeNameLabel">Cipher</span>
extends <a href="../../java/lang/Object.html" title="class in java.lang">Object</a></pre>
<div class="block">
<span>该类提供加密和解密的加密密码的功能。</span>
<span>它构成了Java加密扩展JCE框架的核心。</span>
<p> <span>为了创建一个Cipher对象应用程序调用Cipher的<code>getInstance</code>方法,并将所请求的<i>转换</i>的名称传递给它。</span> <span>可选地,可以指定提供者的名称。</span> </p>
<p> <span><i>转换</i>是描述要在给定输入上执行的操作(或操作集)的字符串,以产生一些输出。</span> <span>转换总是包括<i>加密算法</i>的名称(例如, <i>DES</i> ),并且可以跟随有反馈模式和填充方案。</span> </p>
<p> <span>转换形式如下:</span> </p>
<ul>
<li> <span><i>算法/模式/填充</i> ”或</span> </li>
<li> <span><i>算法</i></span> </li>
</ul>
<p> <span>(在后一种情况下,使用模式和填充方案的提供者特定的默认值)。</span> <span>例如,以下是有效的转换:</span> </p>
<pre> <span>Cipher c = Cipher.getInstance("<i>DES/CBC/PKCS5Padding</i>");</span> </pre>
<span>使用诸如<code>CFB</code><code>OFB</code>之类的模式,块密码可以以比密码的实际块大<code>OFB</code>单位加密数据。</span>
<span>当请求这样的模式时,您可以通过将该号码追加到“ <code>DES/CFB8/NoPadding</code> ”和“ <code>DES/OFB32/PKCS5Padding</code> ”转换中所示的模式名称来选择<code>DES/OFB32/PKCS5Padding</code>位数。</span>
<span>如果没有指定此类号码,则使用特定于提供者的默认值。</span>
<span>例如SunJCE提供程序对DES使用默认值为64位。因此通过使用诸如CFB8或OFB8之类的8位模式块密码可以转换为面向字节的流密码。</span>
<p> <span>诸如使用关联数据的认证加密AEAD等模式为机密数据和未加密的附加关联数据AAD提供真实性保证。</span> <span>(有关<a href="http://www.ietf.org/rfc/rfc5116.txt">AEAD</a>和AEAD算法如GCM / CCM的更多信息请参阅<a href="http://www.ietf.org/rfc/rfc5116.txt">RFC 5116</a> 计算认证标签时可以使用机密数据和AAD数据类似于<a href="../../javax/crypto/Mac.html" title="javax.crypto中的类"><code>Mac</code></a> )。</span> <span>该标签在加密期间附加到密文,并在解密后进行验证。</span> </p>
<p> <span>AEAD模式如GCM / CCM在开始密文真实性计算之前执行所有的AAD真实性计算。</span> <span>为了避免必须在内部缓冲器的密文实施方案中所有数据AAD必须提供给GCM / CCM的实现经由<code>updateAAD</code>方法)密文被处理<b>之前</b> (通过<code>update</code><code>doFinal</code>方法)。</span> </p>
<p> <span>注意GCM模式对于使用给定密钥加密的IV具有唯一性要求。</span> <span>当GCM加密重复IVs时这些用法将遭受伪造攻击。</span> <span>因此在使用GCM模式的每个加密操作之后呼叫者应该使用具有不同IV值的GCM参数重新初始化密码对象。</span> </p>
<pre> <span>GCMParameterSpec s = ...;
cipher.init(..., s);
// If the GCM parameters were generated by the provider, it can
// be retrieved by:
// cipher.getParameters().getParameterSpec(GCMParameterSpec.class);
cipher.updateAAD(...); // AAD
cipher.update(...); // Multi-part update
cipher.doFinal(...); // conclusion of operation
// Use a different IV value for every encryption
byte[] newIv = ...;
s = new GCMParameterSpec(s.getTLen(), newIv);
cipher.init(..., s);
...</span> </pre>
<span>Java平台的每个实现都需要支持以下标准<code>Cipher</code>转换,括号中的键入:</span>
<ul>
<li> <span><tt>AES/CBC/NoPadding</tt> 128</span> </li>
<li> <span><tt>AES/CBC/PKCS5Padding</tt> 128</span> </li>
<li> <span><tt>AES/ECB/NoPadding</tt> 128</span> </li>
<li> <span><tt>AES/ECB/PKCS5Padding</tt> 128</span> </li>
<li> <span><tt>DES/CBC/NoPadding</tt> 56</span> </li>
<li> <span><tt>DES/CBC/PKCS5Padding56</tt></span> </li>
<li> <span><tt>DES/ECB/NoPadding56</tt></span> </li>
<li> <span><tt>DES/ECB/PKCS5Padding</tt> 56</span> </li>
<li> <span><tt>DESede/CBC/NoPadding</tt> 168</span> </li>
<li> <span><tt>DESede/CBC/PKCS5Padding</tt> 168</span> </li>
<li> <span><tt>DESede/ECB/NoPadding</tt> 168</span> </li>
<li> <span><tt>DESede/ECB/PKCS5Padding</tt> 168</span> </li>
<li> <span><tt>RSA/ECB/PKCS1Padding</tt> <tt>10242048</tt> </span> </li>
<li> <span><tt>RSA/ECB/OAEPWithSHA-1AndMGF1Padding</tt> <tt>10242048</tt> </span> </li>
<li> <span><tt>RSA/ECB/OAEPWithSHA-256AndMGF1Padding</tt> <tt>10242048</tt> </span> </li>
</ul>
<span>这些转变在描述<a href="../../../technotes/guides/security/StandardNames.html#Cipher">Cipher section</a> Java加密体系结构标准算法名称的文档。</span>
<span>请参阅实施的发行文档,以查看是否支持其他转换。</span>
</div>
<dl>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.4
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../javax/crypto/KeyGenerator.html" title="javax.crypto中的类"><code>KeyGenerator</code></a> <a href="../../javax/crypto/SecretKey.html" title="javax.crypto中的接口"><code>SecretKey</code></a></span>
</dd>
</dl> </li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- --> </a> <h3>Field Summary</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Field Summary table, listing fields, and an explanation">
<caption>
<span>Fields</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#DECRYPT_MODE">DECRYPT_MODE</a></span></code>
<div class="block">
常数用于将密码初始化为解密模式。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#ENCRYPT_MODE">ENCRYPT_MODE</a></span></code>
<div class="block">
常数用于将密码初始化为加密模式。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#PRIVATE_KEY">PRIVATE_KEY</a></span></code>
<div class="block">
用于指示要解除密钥的常数是“私钥”。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#PUBLIC_KEY">PUBLIC_KEY</a></span></code>
<div class="block">
用于指示待解除密钥的常数是“公钥”。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#SECRET_KEY">SECRET_KEY</a></span></code>
<div class="block">
用于指示要解开的密钥的常数是“密钥”。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#UNWRAP_MODE">UNWRAP_MODE</a></span></code>
<div class="block">
常数用于将密码初始化为密钥解包模式。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#WRAP_MODE">WRAP_MODE</a></span></code>
<div class="block">
常数用于将密码初始化为密钥包装模式。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- --> </a> <h3>构造方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Constructor Summary table, listing constructors, and an explanation">
<caption>
<span>构造方法</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colLast" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#Cipher-javax.crypto.CipherSpi-java.security.Provider-java.lang.String-">Cipher</a></span>(<a href="../../javax/crypto/CipherSpi.html" title="class in javax.crypto">CipherSpi</a> cipherSpi, <a href="../../java/security/Provider.html" title="class in java.security">Provider</a> provider, <a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)</code>
<div class="block">
创建一个Cipher对象。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- --> </a> <h3>方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
<caption>
<span class="activeTableTab" id="t0"><span>所有方法</span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t1"><span><a href="javascript:show(1);">静态方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t4"><span><a href="javascript:show(8);">具体的方法</a></span><span class="tabEnd"> </span></span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor" id="i0">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal--">doFinal</a></span>()</code>
<div class="block">
完成多部分加密或解密操作,这取决于该密码如何初始化。
</div> </td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal-byte:A-">doFinal</a></span>(byte[] input)</code>
<div class="block">
在单一部分操作中加密或解密数据,或完成多部分操作。
</div> </td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal-byte:A-int-">doFinal</a></span>(byte[] output, int outputOffset)</code>
<div class="block">
完成多部分加密或解密操作,这取决于该密码如何初始化。
</div> </td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal-byte:A-int-int-">doFinal</a></span>(byte[] input, int inputOffset, int inputLen)</code>
<div class="block">
在单一部分操作中加密或解密数据,或完成多部分操作。
</div> </td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal-byte:A-int-int-byte:A-">doFinal</a></span>(byte[] input, int inputOffset, int inputLen, byte[] output)</code>
<div class="block">
在单一部分操作中加密或解密数据,或完成多部分操作。
</div> </td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal-byte:A-int-int-byte:A-int-">doFinal</a></span>(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)</code>
<div class="block">
在单一部分操作中加密或解密数据,或完成多部分操作。
</div> </td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#doFinal-java.nio.ByteBuffer-java.nio.ByteBuffer-">doFinal</a></span>(<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> input, <a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> output)</code>
<div class="block">
在单一部分操作中加密或解密数据,或完成多部分操作。
</div> </td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code><a href="../../java/lang/String.html" title="class in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getAlgorithm--">getAlgorithm</a></span>()</code>
<div class="block">
返回该
<code>Cipher</code>对象的算法名称。
</div> </td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getBlockSize--">getBlockSize</a></span>()</code>
<div class="block">
返回块大小(以字节为单位)。
</div> </td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code><a href="../../javax/crypto/ExemptionMechanism.html" title="class in javax.crypto">ExemptionMechanism</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getExemptionMechanism--">getExemptionMechanism</a></span>()</code>
<div class="block">
返回与此密码一起使用的豁免机制对象。
</div> </td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>static <a href="../../javax/crypto/Cipher.html" title="class in javax.crypto">Cipher</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getInstance-java.lang.String-">getInstance</a></span>(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)</code>
<div class="block">
返回实现
<code>Cipher</code>对象。
</div> </td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>static <a href="../../javax/crypto/Cipher.html" title="class in javax.crypto">Cipher</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getInstance-java.lang.String-java.security.Provider-">getInstance</a></span>(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation, <a href="../../java/security/Provider.html" title="class in java.security">Provider</a> provider)</code>
<div class="block">
返回实现
<code>Cipher</code>对象。
</div> </td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code>static <a href="../../javax/crypto/Cipher.html" title="class in javax.crypto">Cipher</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getInstance-java.lang.String-java.lang.String-">getInstance</a></span>(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation, <a href="../../java/lang/String.html" title="class in java.lang">String</a> provider)</code>
<div class="block">
返回实现
<code>Cipher</code>对象。
</div> </td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getIV--">getIV</a></span>()</code>
<div class="block">
返回新缓冲区中的初始化向量IV
</div> </td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getMaxAllowedKeyLength-java.lang.String-">getMaxAllowedKeyLength</a></span>(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)</code>
<div class="block">
根据已安装的JCE管辖区策略文件返回指定转换的最大密钥长度。
</div> </td>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><code>static <a href="../../java/security/spec/AlgorithmParameterSpec.html" title="interface in java.security.spec">AlgorithmParameterSpec</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getMaxAllowedParameterSpec-java.lang.String-">getMaxAllowedParameterSpec</a></span>(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)</code>
<div class="block">
返回一个AlgorithmParameterSpec对象该对象包含根据管辖区策略文件的最大密码参数值。
</div> </td>
</tr>
<tr class="altColor" id="i16">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getOutputSize-int-">getOutputSize</a></span>(int inputLen)</code>
<div class="block">
给定输入长度
<code>inputLen</code> (以字节为单位),返回输出缓冲区需要保存下一个
<code>update</code>
<code>doFinal</code>操作的结果的字节长度。
</div> </td>
</tr>
<tr class="rowColor" id="i17">
<td class="colFirst"><code><a href="../../java/security/AlgorithmParameters.html" title="class in java.security">AlgorithmParameters</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getParameters--">getParameters</a></span>()</code>
<div class="block">
返回与此密码一起使用的参数。
</div> </td>
</tr>
<tr class="altColor" id="i18">
<td class="colFirst"><code><a href="../../java/security/Provider.html" title="class in java.security">Provider</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#getProvider--">getProvider</a></span>()</code>
<div class="block">
返回此
<code>Cipher</code>对象的提供者。
</div> </td>
</tr>
<tr class="rowColor" id="i19">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.cert.Certificate-">init</a></span>(int opmode, <a href="../../java/security/cert/Certificate.html" title="class in java.security.cert">Certificate</a> certificate)</code>
<div class="block">
使用给定证书中的公钥初始化此密码。
</div> </td>
</tr>
<tr class="altColor" id="i20">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.cert.Certificate-java.security.SecureRandom-">init</a></span>(int opmode, <a href="../../java/security/cert/Certificate.html" title="class in java.security.cert">Certificate</a> certificate, <a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)</code>
<div class="block">
使用给定证书中的公钥和随机源初始化此密码。
</div> </td>
</tr>
<tr class="rowColor" id="i21">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.Key-">init</a></span>(int opmode, <a href="../../java/security/Key.html" title="interface in java.security">Key</a> key)</code>
<div class="block">
用密钥初始化此密码。
</div> </td>
</tr>
<tr class="altColor" id="i22">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.Key-java.security.AlgorithmParameters-">init</a></span>(int opmode, <a href="../../java/security/Key.html" title="interface in java.security">Key</a> key, <a href="../../java/security/AlgorithmParameters.html" title="class in java.security">AlgorithmParameters</a> params)</code>
<div class="block">
使用密钥和一组算法参数初始化此密码。
</div> </td>
</tr>
<tr class="rowColor" id="i23">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.Key-java.security.spec.AlgorithmParameterSpec-">init</a></span>(int opmode, <a href="../../java/security/Key.html" title="interface in java.security">Key</a> key, <a href="../../java/security/spec/AlgorithmParameterSpec.html" title="interface in java.security.spec">AlgorithmParameterSpec</a> params)</code>
<div class="block">
使用密钥和一组算法参数初始化此密码。
</div> </td>
</tr>
<tr class="altColor" id="i24">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.Key-java.security.spec.AlgorithmParameterSpec-java.security.SecureRandom-">init</a></span>(int opmode, <a href="../../java/security/Key.html" title="interface in java.security">Key</a> key, <a href="../../java/security/spec/AlgorithmParameterSpec.html" title="interface in java.security.spec">AlgorithmParameterSpec</a> params, <a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)</code>
<div class="block">
使用密钥,一组算法参数和随机源初始化此密码。
</div> </td>
</tr>
<tr class="rowColor" id="i25">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.Key-java.security.AlgorithmParameters-java.security.SecureRandom-">init</a></span>(int opmode, <a href="../../java/security/Key.html" title="interface in java.security">Key</a> key, <a href="../../java/security/AlgorithmParameters.html" title="class in java.security">AlgorithmParameters</a> params, <a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)</code>
<div class="block">
使用密钥,一组算法参数和随机源初始化此密码。
</div> </td>
</tr>
<tr class="altColor" id="i26">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#init-int-java.security.Key-java.security.SecureRandom-">init</a></span>(int opmode, <a href="../../java/security/Key.html" title="interface in java.security">Key</a> key, <a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)</code>
<div class="block">
用密钥和随机源初始化此密码。
</div> </td>
</tr>
<tr class="rowColor" id="i27">
<td class="colFirst"><code><a href="../../java/security/Key.html" title="interface in java.security">Key</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#unwrap-byte:A-java.lang.String-int-">unwrap</a></span>(byte[] wrappedKey, <a href="../../java/lang/String.html" title="class in java.lang">String</a> wrappedKeyAlgorithm, int wrappedKeyType)</code>
<div class="block">
打开以前包装的钥匙。
</div> </td>
</tr>
<tr class="altColor" id="i28">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#update-byte:A-">update</a></span>(byte[] input)</code>
<div class="block">
继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
</div> </td>
</tr>
<tr class="rowColor" id="i29">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#update-byte:A-int-int-">update</a></span>(byte[] input, int inputOffset, int inputLen)</code>
<div class="block">
继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
</div> </td>
</tr>
<tr class="altColor" id="i30">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#update-byte:A-int-int-byte:A-">update</a></span>(byte[] input, int inputOffset, int inputLen, byte[] output)</code>
<div class="block">
继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
</div> </td>
</tr>
<tr class="rowColor" id="i31">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#update-byte:A-int-int-byte:A-int-">update</a></span>(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)</code>
<div class="block">
继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
</div> </td>
</tr>
<tr class="altColor" id="i32">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#update-java.nio.ByteBuffer-java.nio.ByteBuffer-">update</a></span>(<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> input, <a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> output)</code>
<div class="block">
继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。
</div> </td>
</tr>
<tr class="rowColor" id="i33">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#updateAAD-byte:A-">updateAAD</a></span>(byte[] src)</code>
<div class="block">
继续进行附加认证数据AAD的多部分更新。
</div> </td>
</tr>
<tr class="altColor" id="i34">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#updateAAD-byte:A-int-int-">updateAAD</a></span>(byte[] src, int offset, int len)</code>
<div class="block">
使用所提供的缓冲区的子集继续进行附加认证数据AAD的多部分更新。
</div> </td>
</tr>
<tr class="rowColor" id="i35">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#updateAAD-java.nio.ByteBuffer-">updateAAD</a></span>(<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> src)</code>
<div class="block">
继续进行附加认证数据AAD的多部分更新。
</div> </td>
</tr>
<tr class="altColor" id="i36">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../javax/crypto/Cipher.html#wrap-java.security.Key-">wrap</a></span>(<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key)</code>
<div class="block">
包裹钥匙
</div> </td>
</tr>
</tbody>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- --> </a> <h3>Methods inherited from class java.lang.<a href="../../java/lang/Object.html" title="class in java.lang">Object</a></h3> <code><a href="../../java/lang/Object.html#clone--">clone</a>, <a href="../../java/lang/Object.html#equals-java.lang.Object-">equals</a>, <a href="../../java/lang/Object.html#finalize--">finalize</a>, <a href="../../java/lang/Object.html#getClass--">getClass</a>, <a href="../../java/lang/Object.html#hashCode--">hashCode</a>, <a href="../../java/lang/Object.html#notify--">notify</a>, <a href="../../java/lang/Object.html#notifyAll--">notifyAll</a>, <a href="../../java/lang/Object.html#toString--">toString</a>, <a href="../../java/lang/Object.html#wait--">wait</a>, <a href="../../java/lang/Object.html#wait-long-">wait</a>, <a href="../../java/lang/Object.html#wait-long-int-">wait</a></code></li>
</ul> </li>
</ul> </li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- --> </a> <h3>字段详细信息</h3> <a name="ENCRYPT_MODE">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>ENCRYPT_MODE</h4> <pre>public static final int ENCRYPT_MODE</pre>
<div class="block">
常数用于将密码初始化为加密模式。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.ENCRYPT_MODE">Constant Field Values</a>
</dd>
</dl> </li>
</ul> <a name="DECRYPT_MODE">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>DECRYPT_MODE</h4> <pre>public static final int DECRYPT_MODE</pre>
<div class="block">
常数用于将密码初始化为解密模式。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.DECRYPT_MODE">Constant Field Values</a>
</dd>
</dl> </li>
</ul> <a name="WRAP_MODE">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>WRAP_MODE</h4> <pre>public static final int WRAP_MODE</pre>
<div class="block">
常数用于将密码初始化为密钥包装模式。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.WRAP_MODE">Constant Field Values</a>
</dd>
</dl> </li>
</ul> <a name="UNWRAP_MODE">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>UNWRAP_MODE</h4> <pre>public static final int UNWRAP_MODE</pre>
<div class="block">
常数用于将密码初始化为密钥解包模式。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.UNWRAP_MODE">Constant Field Values</a>
</dd>
</dl> </li>
</ul> <a name="PUBLIC_KEY">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>PUBLIC_KEY</h4> <pre>public static final int PUBLIC_KEY</pre>
<div class="block">
用于指示待解除密钥的常数是“公钥”。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.PUBLIC_KEY">Constant Field Values</a>
</dd>
</dl> </li>
</ul> <a name="PRIVATE_KEY">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>PRIVATE_KEY</h4> <pre>public static final int PRIVATE_KEY</pre>
<div class="block">
用于指示要解除密钥的常数是“私钥”。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.PRIVATE_KEY">Constant Field Values</a>
</dd>
</dl> </li>
</ul> <a name="SECRET_KEY">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>SECRET_KEY</h4> <pre>public static final int SECRET_KEY</pre>
<div class="block">
用于指示要解开的密钥的常数是“密钥”。
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../constant-values.html#javax.crypto.Cipher.SECRET_KEY">Constant Field Values</a>
</dd>
</dl> </li>
</ul> </li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- --> </a> <h3>构造方法详细信息</h3> <a name="Cipher-javax.crypto.CipherSpi-java.security.Provider-java.lang.String-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>Cipher</h4> <pre>protected Cipher(<a href="../../javax/crypto/CipherSpi.html" title="class in javax.crypto">CipherSpi</a> cipherSpi,
<a href="../../java/security/Provider.html" title="class in java.security">Provider</a> provider,
<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)</pre>
<div class="block">
创建一个Cipher对象。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>cipherSpi</code> - 代表
</dd>
<dd>
<code>provider</code> - 提供商
</dd>
<dd>
<code>transformation</code> - 转型
</dd>
</dl> </li>
</ul> </li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="getInstance-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getInstance</h4> <pre>public static final <a href="../../javax/crypto/Cipher.html" title="class in javax.crypto">Cipher</a> getInstance(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)
throws <a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a>,
<a href="../../javax/crypto/NoSuchPaddingException.html" title="class in javax.crypto">NoSuchPaddingException</a></pre>
<div class="block">
<span>返回实现<code>Cipher</code>对象。</span>
<p> <span>此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。</span> <span>返回从支持指定算法的第一个Provider中封装CipherSpi实现的新Cipher对象。</span> </p>
<p> <span>请注意,注册提供商的列表可以通过<a href="../../java/security/Security.html#getProviders--"><code>Security.getProviders()</code></a>方法<a href="../../java/security/Security.html#getProviders--">检索</a></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>transformation</code> - 转换的名称,例如<i>DES / CBC / PKCS5Padding</i></span>
<span>有关标准转换名称的信息,请参阅<a href="../../../technotes/guides/security/StandardNames.html#Cipher">Java Cryptography Architecture Standard Algorithm Name Documentation</a>中的“密码”部分。</span>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个实现请求的转换的密码。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果
<code>transformation</code>为空为空以无效格式或者如果没有提供者支持指定算法的CipherSpi实现。
</dd>
<dd>
<code><a href="../../javax/crypto/NoSuchPaddingException.html" title="class in javax.crypto">NoSuchPaddingException</a></code> - 如果
<code>transformation</code>包含
<code>transformation</code>用的填充方案。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../java/security/Provider.html" title="java.security中的类"><code>Provider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getInstance-java.lang.String-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getInstance</h4> <pre>public static final <a href="../../javax/crypto/Cipher.html" title="class in javax.crypto">Cipher</a> getInstance(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation,
<a href="../../java/lang/String.html" title="class in java.lang">String</a> provider)
throws <a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a>,
<a href="../../java/security/NoSuchProviderException.html" title="class in java.security">NoSuchProviderException</a>,
<a href="../../javax/crypto/NoSuchPaddingException.html" title="class in javax.crypto">NoSuchPaddingException</a></pre>
<div class="block">
<span>返回实现<code>Cipher</code>对象。</span>
<p> <span>返回从指定提供程序封装CipherSpi实现的新Cipher对象。</span> <span>指定的提供者必须在安全提供程序列表中注册。</span> </p>
<p> <span>请注意,注册提供商的列表可以通过<a href="../../java/security/Security.html#getProviders--"><code>Security.getProviders()</code></a>方法<a href="../../java/security/Security.html#getProviders--">检索</a></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>transformation</code> - 转换的名称,例如<i>DES / CBC / PKCS5Padding</i></span>
<span>有关标准转换名称的信息,请参阅<a href="../../../technotes/guides/security/StandardNames.html#Cipher">Java Cryptography Architecture Standard Algorithm Name Documentation</a>中的“密码”部分。</span>
</dd>
<dd>
<code>provider</code> - 提供者的名称。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个实现请求的转换的密码。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果
<code>transformation</code>为空为空格式为无效或者指定的算法的CipherSpi实现不能从指定的提供者获得。
</dd>
<dd>
<code><a href="../../java/security/NoSuchProviderException.html" title="class in java.security">NoSuchProviderException</a></code> - 如果指定的提供程序未在安全提供程序列表中注册。
</dd>
<dd>
<code><a href="../../javax/crypto/NoSuchPaddingException.html" title="class in javax.crypto">NoSuchPaddingException</a></code> - 如果
<code>transformation</code>包含
<code>transformation</code>用的填充方案。
</dd>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>为空或为空。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../java/security/Provider.html" title="java.security中的类"><code>Provider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getInstance-java.lang.String-java.security.Provider-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getInstance</h4> <pre>public static final <a href="../../javax/crypto/Cipher.html" title="class in javax.crypto">Cipher</a> getInstance(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation,
<a href="../../java/security/Provider.html" title="class in java.security">Provider</a> provider)
throws <a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a>,
<a href="../../javax/crypto/NoSuchPaddingException.html" title="class in javax.crypto">NoSuchPaddingException</a></pre>
<div class="block">
<span>返回实现<code>Cipher</code>对象。</span>
<p> <span>返回从指定的Provider对象封装CipherSpi实现的新Cipher对象。</span> <span>请注意指定的Provider对象不必在提供者列表中注册。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>transformation</code> - 转换的名称,例如<i>DES / CBC / PKCS5Padding</i></span>
<span>有关标准转换名称的信息,请参阅<a href="../../../technotes/guides/security/StandardNames.html#Cipher">Java Cryptography Architecture Standard Algorithm Name Documentation</a>中的密码部分。</span>
</dd>
<dd>
<code>provider</code> - 提供商。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个实现请求的转换的密码。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果
<code>transformation</code>为空为空为无效格式或者指定的算法的CipherSpi实现不能从指定的Provider对象获得。
</dd>
<dd>
<code><a href="../../javax/crypto/NoSuchPaddingException.html" title="class in javax.crypto">NoSuchPaddingException</a></code> - 如果
<code>transformation</code>包含
<code>transformation</code>用的填充方案。
</dd>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>provider</code>为空。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../java/security/Provider.html" title="java.security中的类"><code>Provider</code></a></span>
</dd>
</dl> </li>
</ul> <a name="getProvider--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getProvider</h4> <pre>public final <a href="../../java/security/Provider.html" title="class in java.security">Provider</a> getProvider()</pre>
<div class="block">
返回此
<code>Cipher</code>对象的提供者。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
这个
<code>Cipher</code>对象的提供者
</dd>
</dl> </li>
</ul> <a name="getAlgorithm--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getAlgorithm</h4> <pre>public final <a href="../../java/lang/String.html" title="class in java.lang">String</a> getAlgorithm()</pre>
<div class="block">
<span>返回此<code>Cipher</code>对象的算法名称。</span>
<p> <span>这是在创建此<code>Cipher</code>对象的<code>getInstance</code>呼叫之一中指定的<code>getInstance</code></span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
该对象的算法名称为
<code>Cipher</code>
</dd>
</dl> </li>
</ul> <a name="getBlockSize--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getBlockSize</h4> <pre>public final int getBlockSize()</pre>
<div class="block">
返回块大小(以字节为单位)。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
块大小以字节为单位如果底层算法不是块密码则为0
</dd>
</dl> </li>
</ul> <a name="getOutputSize-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getOutputSize</h4> <pre>public final int getOutputSize(int inputLen)</pre>
<div class="block">
<span>给定输入长度<code>inputLen</code> (以字节为单位),返回输出缓冲区需要保存下一个<code>update</code><code>doFinal</code>操作结果的字节长度。</span>
<p> <span>此呼叫考虑了来自前一次<code>update</code>呼叫,填充和<code>update</code>标记的任何未处理(缓冲)数据。</span> </p>
<p> <span>下一个<code>update</code><code>doFinal</code>调用的实际输出长度可能小于此方法返回的长度。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>inputLen</code> - 输入长度(以字节为单位)
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
所需的输出缓冲区大小(以字节为单位)
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如尚未初始化)
</dd>
</dl> </li>
</ul> <a name="getIV--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getIV</h4> <pre>public final byte[] getIV()</pre>
<div class="block">
<span>返回新缓冲区中的初始化向量IV</span>
<p> <span>这在创建随机IV的情况下或在基于密码的加密或解密的情况下是有用的其中IV是从用户提供的密码导出的。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新缓冲区中的初始化向量如果底层算法不使用IV或者如果IV尚未设置则为null。
</dd>
</dl> </li>
</ul> <a name="getParameters--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getParameters</h4> <pre>public final <a href="../../java/security/AlgorithmParameters.html" title="class in java.security">AlgorithmParameters</a> getParameters()</pre>
<div class="block">
<span>返回与此密码一起使用的参数。</span>
<p> <span>返回的参数可能与用于初始化此密码的参数相同,或者如果该密码需要算法参数但未被任何初始化,则可能包含底层密码实现使用的默认值和随机参数值的组合。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
与此密码一起使用的参数如果此密码不使用任何参数则为null。
</dd>
</dl> </li>
</ul> <a name="getExemptionMechanism--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getExemptionMechanism</h4> <pre>public final <a href="../../javax/crypto/ExemptionMechanism.html" title="class in javax.crypto">ExemptionMechanism</a> getExemptionMechanism()</pre>
<div class="block">
返回与此密码一起使用的豁免机制对象。
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
与此密码一起使用的豁免机制对象如果此密码不使用任何豁免机制则为null。
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.Key-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></pre>
<div class="block">
<span>用密钥初始化此密码。</span>
<p> <span>根据opmode的值对以下四个操作之一进行密码初始化加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果此密码需要不能从给定的<code>key</code>导出的任何<code>key</code> ,则底层密码实现应该自动生成所需参数(使用提供者特定的默认值或随机值),如果它被初始化为加密或密钥包装,以及引发<code>InvalidKeyException</code> ,如果它被用于解密或密钥打开初始化。</span> <span>生成的参数可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数是IV来检索。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果此cipher包括其基础反馈或填充方案需要随机字节例如用于参数生成那么将使用让他们<a href="../../java/security/SecureRandom.html" title="java.security中的类"><code>SecureRandom</code></a>实现的最高优先级安装的提供作为随机源。</span> <span>如果没有一个已安装的提供商提供SecureRandom的实现将会使用系统提供的随机源。</span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>key</code> - 关键
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定的密钥不适于初始化该密码,或者需要不能从给定密钥确定的算法参数,或者给定的密钥具有超过最大允许密钥大小的密钥大小(从配置的管辖区策略文件确定) 。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.Key-java.security.SecureRandom-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key,
<a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></pre>
<div class="block">
<span>用密钥和随机源初始化此密码。</span>
<p> <span>根据opmode的值密码被初始化为以下四个操作之一加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果此密码需要不能从给定的<code>key</code>导出的任何<code>key</code> ,则底层加密实现应该自动生成所需参数(使用提供者特定的默认值或随机值),如果它被初始化为加密或密钥包装,以及提高一个<code>InvalidKeyException</code>如果它被初始化解密或密钥解包。</span> <span>生成的参数可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数是IV来检索。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从<code>random</code></span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>key</code> - 加密密钥
</dd>
<dd>
<code>random</code> -
<code>random</code>的来源
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定的密钥不适于初始化该密码,或者需要不能从给定密钥确定的算法参数,或者给定密钥具有超过最大允许密钥大小的密钥大小(从配置的管辖区策略文件确定) 。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.Key-java.security.spec.AlgorithmParameterSpec-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key,
<a href="../../java/security/spec/AlgorithmParameterSpec.html" title="interface in java.security.spec">AlgorithmParameterSpec</a> params)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a>,
<a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></pre>
<div class="block">
<span>使用密钥和一组算法参数初始化此密码。</span>
<p> <span>根据opmode的值密码被初始化为以下四个操作之一加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果此密码需要任何算法参数,并且<code>params</code>为null则底层加密实现应该自动生成必需的参数使用特定于提供者的默认值或随机值如果它被初始化为加密或密钥包装并提出一个<code>InvalidAlgorithmParameterException</code> if正在为解密或密钥解包进行初始化。</span> <span>可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数为IV检索生成的参数。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果此cipher包括其基础反馈或填充方案需要随机字节例如用于参数生成那么将使用让他们<a href="../../java/security/SecureRandom.html" title="java.security中的类"><code>SecureRandom</code></a>实现的最高优先级安装的提供作为随机源。</span> <span>如果没有一个已安装的提供商提供SecureRandom的实现将会使用系统提供的随机源。</span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>key</code> - 加密密钥
</dd>
<dd>
<code>params</code> - 算法参数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定的密钥不适合初始化此密码或者其keysize超出了最大允许密钥大小从配置的管辖区策略文件确定
</dd>
<dd>
<code><a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></code> - 如果给定的算法参数不适合此密码,或该密码需要算法参数,并且
<code>params</code>为空,或者给定的算法参数意味着超过合法限制(由配置的管辖区策略文件确定)的加密强度。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.Key-java.security.spec.AlgorithmParameterSpec-java.security.SecureRandom-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key,
<a href="../../java/security/spec/AlgorithmParameterSpec.html" title="interface in java.security.spec">AlgorithmParameterSpec</a> params,
<a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a>,
<a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></pre>
<div class="block">
<span>使用密钥,一组算法参数和随机源初始化此密码。</span>
<p> <span>根据opmode的值将密码初始化为以下四个操作之一加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果此密码需要任何算法参数,并且<code>params</code>为null则底层加密实现应该自动生成所需参数使用特定于提供者的默认值或随机值如果它被初始化为加密或密钥包装并且提出一个<code>InvalidAlgorithmParameterException</code> if正在为解密或密钥解包进行初始化。</span> <span>生成的参数可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数是IV来检索。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果这个密码(包括其底层的反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从<code>random</code></span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>key</code> - 加密密钥
</dd>
<dd>
<code>params</code> - 算法参数
</dd>
<dd>
<code>random</code> -
<code>random</code>的来源
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定的密钥不适合初始化该密码或者其keysize超过最大允许密钥大小从配置的管辖区策略文件确定
</dd>
<dd>
<code><a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></code> - 如果给定的算法参数不适用于此密码,或者该密码需要算法参数,并且
<code>params</code>为空,或者给定的算法参数意味着超过法定限制(由配置的管辖区策略文件确定)的加密强度。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.Key-java.security.AlgorithmParameters-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key,
<a href="../../java/security/AlgorithmParameters.html" title="class in java.security">AlgorithmParameters</a> params)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a>,
<a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></pre>
<div class="block">
<span>使用密钥和一组算法参数初始化此密码。</span>
<p> <span>根据opmode的值对以下四个操作之一进行密码初始化加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果此密码需要任何算法参数,并且<code>params</code>为null则底层加密实现应该自动生成所需参数使用特定于提供者的默认值或随机值如果它被初始化为加密或密钥包装并且提出一个<code>InvalidAlgorithmParameterException</code> if正在为解密或密钥解包进行初始化。</span> <span>可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数为IV<a href="../../javax/crypto/Cipher.html#getParameters--">检索</a> <a href="../../javax/crypto/Cipher.html#getIV--">生成</a>的参数。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果此cipher包括其基础反馈或填充方案需要随机字节例如用于参数生成那么将使用让他们<a href="../../java/security/SecureRandom.html" title="java.security中的类"><code>SecureRandom</code></a>实现的最高优先级安装的提供作为随机源。</span> <span>如果没有一个已安装的提供商提供SecureRandom的实现将会使用系统提供的随机源。</span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>key</code> - 加密密钥
</dd>
<dd>
<code>params</code> - 算法参数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定的密钥不适用于初始化该密码或者其keysize超过最大允许密钥大小从配置的管辖区策略文件确定
</dd>
<dd>
<code><a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></code> - 如果给定的算法参数不适合此密码,或该密码需要算法参数,并且
<code>params</code>为空,或者给定的算法参数意味着超过法定限制(由配置的管辖区策略文件确定)的加密强度。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.Key-java.security.AlgorithmParameters-java.security.SecureRandom-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key,
<a href="../../java/security/AlgorithmParameters.html" title="class in java.security">AlgorithmParameters</a> params,
<a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a>,
<a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></pre>
<div class="block">
<span>使用密钥,一组算法参数和随机源初始化此密码。</span>
<p> <span>根据opmode的值对以下四个操作之一进行密码初始化加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果此密码需要任何算法参数,并且<code>params</code>为null则底层加密实现应该自动生成所需参数使用特定于提供者的默认值或随机值如果它被初始化为加密或密钥包装并且提出一个<code>InvalidAlgorithmParameterException</code> if正在为解密或密钥解包进行初始化。</span> <span>生成的参数可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数是IV来检索。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果这个密码(包括其底层的反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从<code>random</code></span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>key</code> - 加密密钥
</dd>
<dd>
<code>params</code> - 算法参数
</dd>
<dd>
<code>random</code> -
<code>random</code>的来源
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定的密钥不适用于初始化该密码或者其keysize超过了允许的最大密钥大小由配置的管辖区策略文件确定
</dd>
<dd>
<code><a href="../../java/security/InvalidAlgorithmParameterException.html" title="class in java.security">InvalidAlgorithmParameterException</a></code> - 如果给定的算法参数不适合此密码,或者该密码需要算法参数,并且
<code>params</code>为空,或者给定的算法参数意味着超过法定限制(由配置的管辖区策略文件确定)的加密强度。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.cert.Certificate-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/cert/Certificate.html" title="class in java.security.cert">Certificate</a> certificate)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></pre>
<div class="block">
<span>使用给定证书中的公钥初始化此密码。</span>
<p> <span>根据opmode的值将密码初始化为以下四个操作之一加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果证书是类型X.509,并且<i>密钥使用</i>扩展字段被标记为关键,并且<i>密钥使用</i>扩展字段的值意味着证书中的公钥及其相应的私钥不应被用于由的值表示操作<code>opmode</code> ,一个<code>InvalidKeyException</code>被抛出。</span> </p>
<p> <span>如果该密码需要任何不能从给定证书中的公开密钥导出的算法参数,则底层密码实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密,密钥包装,并提出一个<code>InvalidKeyException</code>如果它被初始化解密或密钥解包。</span> <span>生成的参数可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数为IV检索。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果此cipher包括其基础反馈或填充方案需要随机字节例如用于参数生成那么将使用让他们<code>SecureRandom</code>实现的最高优先级安装的提供作为随机源。</span> <span>如果没有一个已安装的提供商提供SecureRandom的实现将会使用系统提供的随机源。</span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>certificate</code> - 证书
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定证书中的公钥不适合初始化该密码,或者该密码需要不能从给定证书中的公钥确定的算法参数,或给定证书中的公钥密钥大小具有密钥长度超过最大允许密钥大小(由配置的管辖区策略文件确定)。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="init-int-java.security.cert.Certificate-java.security.SecureRandom-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>init</h4> <pre>public final void init(int opmode,
<a href="../../java/security/cert/Certificate.html" title="class in java.security.cert">Certificate</a> certificate,
<a href="../../java/security/SecureRandom.html" title="class in java.security">SecureRandom</a> random)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></pre>
<div class="block">
<span>使用给定证书中的公钥和随机源初始化此密码。</span>
<p> <span>根据opmode的值密码被初始化为以下四个操作之一加密解密密钥包装或密钥解<code>opmode</code></span> </p>
<p> <span>如果证书是类型X.509,并且<i>密钥使用</i>扩展字段被标记为关键,并且<i>密钥使用</i>扩展字段的值意味着证书中的公钥及其相应的私钥不应被用于由的值表示操作<code>opmode</code> ,一个<code>InvalidKeyException</code>被抛出。</span> </p>
<p> <span>如果此密码需要在给定的<code>certificate</code>中无法从公钥中<code>certificate</code>的任何算法<code>certificate</code> ,则底层加密实现应该自动生成所需参数(使用特定于提供者的默认值或随机值),如果它被初始化为加密,密钥包装,并提出一个<code>InvalidKeyException</code>如果它被初始化解密或密钥解包。</span> <span>可以使用<a href="../../javax/crypto/Cipher.html#getParameters--"><code>getParameters</code></a><a href="../../javax/crypto/Cipher.html#getIV--"><code>getIV</code></a> 如果参数为IV检索生成的参数。</span> </p>
<p> <span>如果该密码需要不能从输入参数导出的算法参数,并且没有合理的提供者特定的默认值,则初始化必然会失败。</span> </p>
<p> <span>如果这个密码(包括其底层反馈或填充方案)需要任何随机字节(例如,用于参数生成),它将从<code>random</code></span> </p>
<p> <span>请注意当一个Cipher对象被初始化时它将失去所有先前获取的状态。</span> <span>换句话说初始化一个Cipher相当于创建一个新的Cipher实例并对其进行初始化。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>opmode</code> -此cipher的操作模式这是下列之一
<code>ENCRYPT_MODE</code>
<code>DECRYPT_MODE</code>
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>
</dd>
<dd>
<code>certificate</code> - 证书
</dd>
<dd>
<code>random</code> -
<code>random</code>的来源
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果给定证书中的公钥不适于初始化该密码,或者该密码需要不能根据给定证书中的公钥确定算法参数,或给定证书中的公钥密钥大小具有密钥长度超过最大允许密钥大小(由配置的管辖区策略文件确定)。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - if@code opmode
<code>WRAP_MODE</code>
<code>UNWRAP_MODE</code>但是模式不是由底层的
<code>CipherSpi</code>
</dd>
</dl> </li>
</ul> <a name="update-byte:A-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>update</h4> <pre>public final byte[] update(byte[] input)</pre>
<div class="block">
<span>继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。</span>
<p> <span>处理<code>input</code>缓冲区中的字节,结果存储在新的缓冲区中。</span> </p>
<p> <span>如果<code>input</code>的长度为零,此方法返回<code>null</code></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
具有结果的新缓冲区如果底层密码是块密码并且输入数据太短导致新的块则为null。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
</dl> </li>
</ul> <a name="update-byte:A-int-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>update</h4> <pre>public final byte[] update(byte[] input,
int inputOffset,
int inputLen)</pre>
<div class="block">
<span>继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。</span>
<p> <span>第一<code>inputLen</code>字节在<code>input</code>缓冲区中,从<code>inputOffset</code>以下,被处理,并且结果被存储在新的缓冲器。</span> </p>
<p> <span>如果<code>inputLen</code>为零,此方法返回<code>null</code></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dd>
<code>inputOffset</code> -
<code>input</code>中的输入开始的偏移量
</dd>
<dd>
<code>inputLen</code> - 输入长度
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
具有结果的新缓冲区如果底层密码是块密码并且输入数据太短导致新的块则为null。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
</dl> </li>
</ul> <a name="update-byte:A-int-int-byte:A-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>update</h4> <pre>public final int update(byte[] input,
int inputOffset,
int inputLen,
byte[] output)
throws <a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></pre>
<div class="block">
<span>继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。</span>
<p> <span><code>input</code>缓冲区中的第一个<code>inputLen</code>字节(从<code>input</code>开始, <code>inputOffset</code>处理)被处理,结果存储在<code>output</code>缓冲区中。</span> </p>
<p> <span>如果<code>output</code>缓冲区太小而不能保存结果,则抛出<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>来确定输出缓冲区应该有多大。</span> </p>
<p> <span>如果<code>inputLen</code>为零,则此方法返回零长度。</span> </p>
<p> <span>注意:该方法应该是安全的,这意味着<code>input</code><code>output</code>缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dd>
<code>inputOffset</code> -
<code>input</code>中的输入开始的偏移量
</dd>
<dd>
<code>inputLen</code> - 输入长度
</dd>
<dd>
<code>output</code> - 结果的缓冲区
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果给定的输出缓冲区太小,不能保存结果
</dd>
</dl> </li>
</ul> <a name="update-byte:A-int-int-byte:A-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>update</h4> <pre>public final int update(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws <a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></pre>
<div class="block">
<span>继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。</span>
<p> <span>第一<code>inputLen</code>字节在<code>input</code>缓冲区中,从<code>inputOffset</code>以下,被处理,并且结果被存储在<code>output</code>缓冲区中,从<code>outputOffset</code>以下。</span> </p>
<p> <span>如果<code>output</code>缓冲区太小而不能保存结果,则抛出<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>来确定输出缓冲区应该有多大。</span> </p>
<p> <span>如果<code>inputLen</code>为零,则此方法返回零长度。</span> </p>
<p> <span>注意:该方法应该是复制安全的,这意味着<code>input</code><code>output</code>缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dd>
<code>inputOffset</code> -
<code>input</code>中的输入开始的偏移量
</dd>
<dd>
<code>inputLen</code> - 输入长度
</dd>
<dd>
<code>output</code> - 结果的缓冲区
</dd>
<dd>
<code>outputOffset</code> - 存储结果的
<code>output</code>中的偏移量
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果给定的输出缓冲区太小,不能保存结果
</dd>
</dl> </li>
</ul> <a name="update-java.nio.ByteBuffer-java.nio.ByteBuffer-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>update</h4> <pre>public final int update(<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> input,
<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> output)
throws <a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></pre>
<div class="block">
<span>继续进行多部分加密或解密操作(取决于如何初始化该密码),处理另一个数据部分。</span>
<p> <span>所有<code>input.remaining()</code>起始字节<code>input.position()</code>进行处理。</span> <span>结果存储在输出缓冲区中。</span> <span>返回时,输入缓冲区的位置将等于其限制;</span> <span>其限制将不会改变。</span> <span>输出缓冲区的位置将提前n其中n是此方法返回的值;</span> <span>输出缓冲区的限制将不会改变。</span> </p>
<p> <span>如果<code>output.remaining()</code>字节不足以保存结果,则抛出<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>来确定输出缓冲区应该有多大。</span> </p>
<p> <span>注意:该方法应该是复制安全的,这意味着<code>input</code><code>output</code>缓冲区可以引用相同的内存块,并且当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入ByteBuffer
</dd>
<dd>
<code>output</code> - 输出ByteByffer
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果输入和输出是相同的对象
</dd>
<dd>
<code><a href="../../java/nio/ReadOnlyBufferException.html" title="class in java.nio">ReadOnlyBufferException</a></code> - 输出缓冲区是否为只读
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果输出缓冲区中没有足够的空间
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.5
</dd>
</dl> </li>
</ul> <a name="doFinal--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final byte[] doFinal()
throws <a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>完成多部分加密或解密操作,这取决于该密码如何初始化。</span>
<p> <span>在以前的<code>update</code>操作中可能已被缓冲的输入数据被处理,并且应用填充(如果请求)。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在一个新的缓冲区。</span> </p>
<p> <span>完成后,此方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新的缓冲区结果
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但解密的数据不受适当的填充字节的限制
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式例如GCM / CCM中解密并且接收到的认证标签与计算值不匹配
</dd>
</dl> </li>
</ul> <a name="doFinal-byte:A-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final int doFinal(byte[] output,
int outputOffset)
throws <a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>完成多部分加密或解密操作,这取决于该密码如何初始化。</span>
<p> <span>在以前的<code>update</code>操作中可能已经缓冲的输入数据被处理,并且应用填充(如果请求)。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在<code>output</code>缓冲区中,从<code>outputOffset</code>开始。</span> </p>
<p> <span>如果<code>output</code>缓冲区太小而不能保存结果,则会抛出一个<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>来确定输出缓冲区应该有多大。</span> </p>
<p> <span>完成后,此方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>output</code> - 结果的缓冲区
</dd>
<dd>
<code>outputOffset</code> - 存储结果的
<code>output</code>中的偏移量
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果给定的输出缓冲区太小,不能保存结果
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但是解密的数据不受适当的填充字节的限制
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式如GCM / CCM中解密并且接收的认证标签与计算值不匹配
</dd>
</dl> </li>
</ul> <a name="doFinal-byte:A-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final byte[] doFinal(byte[] input)
throws <a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>在单一部分操作中加密或解密数据,或完成多部分操作。</span>
<span>数据被加密或解密,这取决于这个密码如何初始化。</span>
<p> <span><code>input</code>缓冲区中的字节以及在先前的<code>update</code>操作中可能已被缓冲的任何输入字节将被处理,并且应用了填充(如果请求)。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在一个新的缓冲区。</span> </p>
<p> <span>完成后,此方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新的缓冲区结果
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但是解密的数据不被适当的填充字节
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式例如GCM / CCM中解密并且接收到的认证标签与计算值不匹配
</dd>
</dl> </li>
</ul> <a name="doFinal-byte:A-int-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final byte[] doFinal(byte[] input,
int inputOffset,
int inputLen)
throws <a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>在单一部分操作中加密或解密数据,或完成多部分操作。</span>
<span>数据被加密或解密,这取决于这个密码如何初始化。</span>
<p> <span>第一<code>inputLen</code>字节在<code>input</code>缓冲区中,从<code>inputOffset</code>以下,并且可能在上一次期间已缓存的任何输入字节<code>update</code>操作,进行处理,填充(如果要求)被施加。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在一个新的缓冲区。</span> </p>
<p> <span>完成后,该方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dd>
<code>inputOffset</code> -
<code>input</code>的输入开始的偏移量
</dd>
<dd>
<code>inputLen</code> - 输入长度
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
新的缓冲区结果
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但是解密的数据不受适当的填充字节的限制
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式如GCM / CCM中解密并且接收的认证标签与计算值不匹配
</dd>
</dl> </li>
</ul> <a name="doFinal-byte:A-int-int-byte:A-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final int doFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output)
throws <a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a>,
<a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>在单一部分操作中加密或解密数据,或完成多部分操作。</span>
<span>数据被加密或解密,这取决于这个密码如何初始化。</span>
<p> <span>第一<code>inputLen</code>字节在<code>input</code>缓冲区中,从<code>inputOffset</code>以下,并且可能在上一次期间已缓存的任何输入字节<code>update</code>操作,进行处理,填充(如果要求)被施加。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在<code>output</code>缓冲区中。</span> </p>
<p> <span>如果<code>output</code>缓冲区太小而不能保存结果,则抛出<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>确定输出缓冲区应该有多大。</span> </p>
<p> <span>完成后,此方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
<p> <span>注意:该方法应该是安全的,这意味着<code>input</code><code>output</code>缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dd>
<code>inputOffset</code> -
<code>input</code>中的输入开始的偏移量
</dd>
<dd>
<code>inputLen</code> - 输入长度
</dd>
<dd>
<code>output</code> - 结果的缓冲区
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果给定的输出缓冲区太小,不能保存结果
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但解密的数据不受适当的填充字节的限制
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式例如GCM / CCM中解密并且接收到的认证标签与计算值不匹配
</dd>
</dl> </li>
</ul> <a name="doFinal-byte:A-int-int-byte:A-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final int doFinal(byte[] input,
int inputOffset,
int inputLen,
byte[] output,
int outputOffset)
throws <a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a>,
<a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>在单一部分操作中加密或解密数据,或完成多部分操作。</span>
<span>数据被加密或解密,这取决于这个密码如何初始化。</span>
<p> <span>第一<code>inputLen</code>字节在<code>input</code>缓冲区中,从<code>inputOffset</code>以下,并且可能在上一次期间已缓存的任何输入字节<code>update</code>操作,进行处理,填充(如果要求)被施加。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在<code>output</code>缓冲区中,从<code>outputOffset</code>开始。</span> </p>
<p> <span>如果<code>output</code>缓冲区太小,无法保存结果,则会抛出一个<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>来确定输出缓冲区应该有多大。</span> </p>
<p> <span>完成后,此方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
<p> <span>注意:该方法应该是安全的,这意味着<code>input</code><code>output</code>缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入缓冲区
</dd>
<dd>
<code>inputOffset</code> -
<code>input</code>中的输入开始的偏移量
</dd>
<dd>
<code>inputLen</code> - 输入长度
</dd>
<dd>
<code>output</code> - 结果的缓冲区
</dd>
<dd>
<code>outputOffset</code> - 存储结果的偏移量为
<code>output</code>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果给定的输出缓冲区太小,不能保存结果
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但是解密的数据不受适当的填充字节的限制
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式例如GCM / CCM中解密并且接收的认证标签与计算值不匹配
</dd>
</dl> </li>
</ul> <a name="doFinal-java.nio.ByteBuffer-java.nio.ByteBuffer-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doFinal</h4> <pre>public final int doFinal(<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> input,
<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> output)
throws <a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a>,
<a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></pre>
<div class="block">
<span>在单一部分操作中加密或解密数据,或完成多部分操作。</span>
<span>数据被加密或解密,这取决于这个密码如何初始化。</span>
<p> <span>所有<code>input.remaining()</code>起始字节<code>input.position()</code>进行处理。</span> <span>如果正在使用诸如GCM / CCM的AEAD模式则在加密的情况下附加认证标签或者在解密的情况下验证认证标签。</span> <span>结果存储在输出缓冲区中。</span> <span>返回时,输入缓冲区的位置将等于其限制;</span> <span>其限制将不会改变。</span> <span>输出缓冲区的位置将提前n其中n是此方法返回的值;</span> <span>输出缓冲区的限制将不会改变。</span> </p>
<p> <span>如果<code>output.remaining()</code>字节不足以容纳结果,则抛出<code>ShortBufferException</code></span> <span>在这种情况下,使用较大的输出缓冲区重复此呼叫。</span> <span>使用<a href="../../javax/crypto/Cipher.html#getOutputSize-int-"><code>getOutputSize</code></a>来确定输出缓冲区应该有多大。</span> </p>
<p> <span>完成后,该方法将此密码对象重置为先前通过调用<code>init</code></span> <span>也就是说,该对象被复位并且可用于加密或解密(取决于这是在调用所指定的操作模式<code>init</code> )更多的数据。</span> </p>
<p> <span>注意:如果发生任何异常,则可能需要重新设置此密码对象,然后才能再次使用。</span> </p>
<p> <span>注意:该方法应该是安全的,这意味着<code>input</code><code>output</code>缓冲区可以引用相同的字节数组,当结果被复制到输出缓冲区中时,没有未处理的输入数据被覆盖。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>input</code> - 输入ByteBuffer
</dd>
<dd>
<code>output</code> - 输出ByteBuffer
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
存储在
<code>output</code>中的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)
</dd>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果输入和输出是相同的对象
</dd>
<dd>
<code><a href="../../java/nio/ReadOnlyBufferException.html" title="class in java.nio">ReadOnlyBufferException</a></code> - 输出缓冲区是否为只读
</dd>
<dd>
<span><code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不会请求填充(仅在加密模式下),并且由该密码处理的数据的总输入长度不是块大小的倍数;</span>
<span>或者如果此加密算法无法处理提供的输入数据。</span>
</dd>
<dd>
<code><a href="../../javax/crypto/ShortBufferException.html" title="class in javax.crypto">ShortBufferException</a></code> - 如果输出缓冲区中没有足够的空间
</dd>
<dd>
<code><a href="../../javax/crypto/BadPaddingException.html" title="class in javax.crypto">BadPaddingException</a></code> - 如果该密码处于解密模式并且已经请求了un填充但是解密的数据不受适当的填充字节的限制
</dd>
<dd>
<code><a href="../../javax/crypto/AEADBadTagException.html" title="class in javax.crypto">AEADBadTagException</a></code> - 如果该密码在AEAD模式例如GCM / CCM中解密并且接收到的认证标签与计算值不匹配
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.5
</dd>
</dl> </li>
</ul> <a name="wrap-java.security.Key-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>wrap</h4> <pre>public final byte[] wrap(<a href="../../java/security/Key.html" title="interface in java.security">Key</a> key)
throws <a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a>,
<a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></pre>
<div class="block">
包裹钥匙
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>key</code> - 要包装的关键。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
包裹的钥匙。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)。
</dd>
<dd>
<code><a href="../../javax/crypto/IllegalBlockSizeException.html" title="class in javax.crypto">IllegalBlockSizeException</a></code> - 如果该密码是块密码,则不请求填充,并且要包装的密钥的编码长度不是块大小的倍数。
</dd>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> - 如果使用该密码将密钥包装是不可能或不安全的(例如,硬件保护密钥正在传递给仅软件密码)。
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - 如果不支持
<code>CipherSpi</code>中的相应方法。
</dd>
</dl> </li>
</ul> <a name="unwrap-byte:A-java.lang.String-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>unwrap</h4> <pre>public final <a href="../../java/security/Key.html" title="interface in java.security">Key</a> unwrap(byte[] wrappedKey,
<a href="../../java/lang/String.html" title="class in java.lang">String</a> wrappedKeyAlgorithm,
int wrappedKeyType)
throws <a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a>,
<a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></pre>
<div class="block">
打开以前包装的钥匙。
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>wrappedKey</code> - 要解开的关键。
</dd>
<dd>
<code>wrappedKeyAlgorithm</code> - 与包裹密钥相关联的算法。
</dd>
<dd>
<span><code>wrappedKeyType</code> - 包装钥匙的类型。</span>
<span>这必须是一个<code>SECRET_KEY</code> <code>PRIVATE_KEY</code> ,或<code>PUBLIC_KEY</code></span>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
展开的钥匙。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态(例如,尚未初始化)。
</dd>
<dd>
<code><a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> -如果没有安装供应商可以创建类型的键
<code>wrappedKeyType</code>
<code>wrappedKeyAlgorithm</code>
</dd>
<dd>
<code><a href="../../java/security/InvalidKeyException.html" title="class in java.security">InvalidKeyException</a></code> -如果
<code>wrappedKey</code>不表示类型的包装的密钥
<code>wrappedKeyType</code>
<code>wrappedKeyAlgorithm</code>
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> - 如果不支持
<code>CipherSpi</code>中的相应方法。
</dd>
</dl> </li>
</ul> <a name="getMaxAllowedKeyLength-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getMaxAllowedKeyLength</h4> <pre>public static final int getMaxAllowedKeyLength(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)
throws <a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></pre>
<div class="block">
<span>根据已安装的JCE管辖区策略文件返回指定转换的最大密钥长度。</span>
<span>如果安装JCE无限制权限策略文件则返回Integer.MAX_VALUE。</span>
<span>有关JCE管辖区策略文件中默认密钥大小的更多信息请参阅<a href="../../../technotes/guides/security/crypto/CryptoSpec.html#AppC">Java Cryptography Architecture Reference Guide</a>中的附录E.</span>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>transformation</code> - 密码转换。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
最大密钥长度以位或Integer.MAX_VALUE为单位。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果
<code>transformation</code>为空。
</dd>
<dd>
<code><a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果
<code>transformation</code>不是有效的转换,即以“算法”或“算法/模式/填充”的形式。
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.5
</dd>
</dl> </li>
</ul> <a name="getMaxAllowedParameterSpec-java.lang.String-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getMaxAllowedParameterSpec</h4> <pre>public static final <a href="../../java/security/spec/AlgorithmParameterSpec.html" title="interface in java.security.spec">AlgorithmParameterSpec</a> getMaxAllowedParameterSpec(<a href="../../java/lang/String.html" title="class in java.lang">String</a> transformation)
throws <a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></pre>
<div class="block">
<span>返回一个AlgorithmParameterSpec对象该对象包含根据管辖区策略文件的最大密码参数值。</span>
<span>如果安装了JCE无限制权限策略文件或策略文件中指定转换的参数没有最大限制则返回null。</span>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>transformation</code> - 密码转换。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个保存最大值的AlgorithmParameterSpec或null。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果
<code>transformation</code>为空。
</dd>
<dd>
<code><a href="../../java/security/NoSuchAlgorithmException.html" title="class in java.security">NoSuchAlgorithmException</a></code> - 如果
<code>transformation</code>不是有效的转换,即以“算法”或“算法/模式/填充”的形式。
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.5
</dd>
</dl> </li>
</ul> <a name="updateAAD-byte:A-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>updateAAD</h4> <pre>public final void updateAAD(byte[] src)</pre>
<div class="block">
<span>继续进行附加认证数据AAD的多部分更新。</span>
<p> <span>当使用AEADGCM / CCM等模式运行时调用此方法可以为密码提供AAD。</span> <span>如果此密码在GCM或CCM模式下运行则必须在密文开始操作之前通过<code>update</code><code>doFinal</code>方法提供所有AAD。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>src</code> - 包含附加认证数据的缓冲区
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>src</code>字节数组为空
</dd>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态例如尚未初始化则不接受AAD或者在GCM或CCM模式下运行并且
<code>update</code>方法之一已被调用用于主动加密/解密操作
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> -如果在相应的方法
<code>CipherSpi</code>尚未覆盖的实现
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.7
</dd>
</dl> </li>
</ul> <a name="updateAAD-byte:A-int-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>updateAAD</h4> <pre>public final void updateAAD(byte[] src,
int offset,
int len)</pre>
<div class="block">
<span>使用所提供的缓冲区的子集继续进行附加认证数据AAD的多部分更新。</span>
<p> <span>当使用AEADGCM / CCM等模式运行时调用此方法可以为密码提供AAD。</span> <span>如果此密码在GCM或CCM模式下运行则必须在密文开始操作之前通过<code>update</code><code>doFinal</code>方法提供所有AAD。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>src</code> - 包含AAD的缓冲区
</dd>
<dd>
<code>offset</code> - 偏移在
<code>src</code>其中AAD输入开始
</dd>
<dd>
<code>len</code> - AAD字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>src</code>字节数组为空,或者
<code>offset</code>
<code>length</code>小于0
<code>offset</code>
<code>len</code>的总和大于
<code>src</code>字节数组的长度
</dd>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态例如尚未初始化则不接受AAD或者在GCM或CCM模式下运行并且
<code>update</code>方法之一已经被调用用于主动加密/解密操作
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> -如果在相应的方法
<code>CipherSpi</code>尚未覆盖的实现
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.7
</dd>
</dl> </li>
</ul> <a name="updateAAD-java.nio.ByteBuffer-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>updateAAD</h4> <pre>public final void updateAAD(<a href="../../java/nio/ByteBuffer.html" title="class in java.nio">ByteBuffer</a> src)</pre>
<div class="block">
<span>继续进行附加认证数据AAD的多部分更新。</span>
<p> <span>当使用AEADGCM / CCM等模式运行时调用此方法可以为密码提供AAD。</span> <span>如果此密码在GCM或CCM模式下运行则必须在密文开始操作之前通过<code>update</code><code>doFinal</code>方法提供所有AAD。</span> </p>
<p> <span>所有<code>src.remaining()</code>起始字节<code>src.position()</code>进行处理。</span> <span>返回时,输入缓冲区的位置将等于其限制;</span> <span>其限制将不会改变。</span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>src</code> - 包含AAD的缓冲区
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>src ByteBuffer</code>为空
</dd>
<dd>
<code><a href="../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果此密码处于错误状态例如尚未初始化则不接受AAD或者在GCM或CCM模式下运行并且
<code>update</code>方法中的一个已被调用用于主动加密/解密操作
</dd>
<dd>
<code><a href="../../java/lang/UnsupportedOperationException.html" title="class in java.lang">UnsupportedOperationException</a></code> -如果在相应的方法
<code>CipherSpi</code>尚未覆盖的实现
</dd>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.7
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>