-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathmdecrypt-generic.xml
150 lines (139 loc) · 4.1 KB
/
mdecrypt-generic.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: d91e36266dddbe570789dbe218e5672fc0b85089 Maintainer: yuanyuqiang Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<refentry xml:id="function.mdecrypt-generic" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>mdecrypt_generic</refname>
<refpurpose>解密数据</refpurpose>
</refnamediv>
<refsynopsisdiv>
&warn.deprecated.function-7-1-0.removed-7-2-0;
</refsynopsisdiv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>mdecrypt_generic</methodname>
<methodparam><type>resource</type><parameter>td</parameter></methodparam>
<methodparam><type>string</type><parameter>data</parameter></methodparam>
</methodsynopsis>
<para>
解密数据。
请注意,由于存在数据补齐的情况,
返回字符串的长度可能和明文的长度不相等。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>td</parameter></term>
<listitem>
<para>
由
<function>mcrypt_module_open</function> 函数创建的加密描述符。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>data</parameter></term>
<listitem>
<para>
密文。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Returns decrypted string.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>mdecrypt_generic</function> 示例</title>
<programlisting role="php">
<![CDATA[
<?php
/* 数据 */
$key = 'this is a very long key, even too long for the cipher';
$plain_text = 'very important data';
/* 打开加密模块,并且创建初始向量 */
$td = mcrypt_module_open('des', '', 'ecb', '');
$key = substr($key, 0, mcrypt_enc_get_key_size($td));
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
/* 初始化加密句柄 */
if (mcrypt_generic_init($td, $key, $iv) != -1) {
/* 加密数据 */
$c_t = mcrypt_generic($td, $plain_text);
mcrypt_generic_deinit($td);
/* 为解密重新初始化缓冲区 */
mcrypt_generic_init($td, $key, $iv);
$p_t = mdecrypt_generic($td, $c_t);
/* 执行清理工作 */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
}
if (strncmp($p_t, $plain_text, strlen($plain_text)) == 0) {
echo "ok\n";
} else {
echo "error\n";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
上例中演示了如何检测
解密后的数据是否和原始明文长度一致。
需要着重提醒的是,在对数据进行机密之前,
必须使用 <function>mcrypt_generic_init</function>
函数来重新初始化缓冲区。
</para>
<para>
调用本函数之前,
必须使用密钥和初始向量来调用 <function>mcrypt_generic_init</function> 函数
对解密句柄进行初始化。
加解密工作完成之后,需要调用 <function>mcrypt_generic_deinit</function> 来释放加解密缓冲区。
示例请参见 <function>mcrypt_module_open</function>。
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>mcrypt_generic</function></member>
<member><function>mcrypt_generic_init</function></member>
<member><function>mcrypt_generic_deinit</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->