- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php DES加密算法实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了php DES加密算法。分享给大家供大家参考,具体如下:
yii框架的DES代码 。
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
|
<?php
/**
*@see Yii CSecurityManager;
*/
class
Des{
public
static
function
encrypt(
$data
,
$key
){
$module
=mcrypt_module_open(
'des'
,
''
, MCRYPT_MODE_CBC,
''
);
$key
=
substr
(md5(
$key
),0,mcrypt_enc_get_key_size(
$module
));
srand();
$iv
=mcrypt_create_iv(mcrypt_enc_get_iv_size(
$module
), MCRYPT_RAND);
mcrypt_generic_init(
$module
,
$key
,
$iv
);
$encrypted
=
$iv
.mcrypt_generic(
$module
,
$data
);
mcrypt_generic_deinit(
$module
);
mcrypt_module_close(
$module
);
return
md5(
$data
).
'_'
.
base64_encode
(
$encrypted
);
}
public
static
function
decrypt(
$data
,
$key
){
$_data
=
explode
(
'_'
,
$data
,2);
if
(
count
(
$_data
)<2){
return
false;
}
$data
=
base64_decode
(
$_data
[1]);
$module
=mcrypt_module_open(
'des'
,
''
, MCRYPT_MODE_CBC,
''
);
$key
=
substr
(md5(
$key
),0,mcrypt_enc_get_key_size(
$module
));
$ivSize
=mcrypt_enc_get_iv_size(
$module
);
$iv
=
substr
(
$data
,0,
$ivSize
);
mcrypt_generic_init(
$module
,
$key
,
$iv
);
$decrypted
=mdecrypt_generic(
$module
,
substr
(
$data
,
$ivSize
,
strlen
(
$data
)));
mcrypt_generic_deinit(
$module
);
mcrypt_module_close(
$module
);
$decrypted
= rtrim(
$decrypted
,
"\0"
);
if
(
$_data
[0]!=md5(
$decrypted
)){
return
false;
}
return
$decrypted
;
}
}
|
在网上看到了一篇文章,讲到:
由于PHP使用mcrypt扩展进行3DES加密,填充模式是跟JAVA以及.NET是不一样的,JAVA和.NET填充模式使用的是PKCS7.
所以PHP端必须自定义一个函数对加密字符串进行PKCS7模式补位填充.
另外一点就是双方的KEY注意进行base64编码,最后PHP端经过3DES加密后得到的结果也需要进行base64编码.
以上几点都做好之后,加密结果就一致了.
下面是兼容C#和java的3DES加密的算法 。
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
|
<?php
class
STD3Des
{
private
$key
=
""
;
private
$iv
=
""
;
/**
* 构造,传递二个已经进行base64_encode的KEY与IV
*
* @param string $key
* @param string $iv
*/
function
__construct (
$key
,
$iv
)
{
if
(
empty
(
$key
) ||
empty
(
$iv
)) {
echo
'key and iv is not valid'
;
exit
();
}
$this
->key =
$key
;
$this
->iv =
$iv
;
}
/**
*加密
* @param <type> $value
* @return <type>
*/
public
function
encrypt (
$value
)
{
$td
= mcrypt_module_open(MCRYPT_3DES,
''
, MCRYPT_MODE_CBC,
''
);
$iv
=
base64_decode
(
$this
->iv);
$value
=
$this
->PaddingPKCS7(
$value
);
$key
=
base64_decode
(
$this
->key);
mcrypt_generic_init(
$td
,
$key
,
$iv
);
$ret
=
base64_encode
(mcrypt_generic(
$td
,
$value
));
mcrypt_generic_deinit(
$td
);
mcrypt_module_close(
$td
);
return
$ret
;
}
/**
*解密
* @param <type> $value
* @return <type>
*/
public
function
decrypt (
$value
)
{
$td
= mcrypt_module_open(MCRYPT_3DES,
''
, MCRYPT_MODE_CBC,
''
);
$iv
=
base64_decode
(
$this
->iv);
$key
=
base64_decode
(
$this
->key);
mcrypt_generic_init(
$td
,
$key
,
$iv
);
$ret
= trim(mdecrypt_generic(
$td
,
base64_decode
(
$value
)));
$ret
=
$this
->UnPaddingPKCS7(
$ret
);
mcrypt_generic_deinit(
$td
);
mcrypt_module_close(
$td
);
return
$ret
;
}
private
function
PaddingPKCS7 (
$data
)
{
$block_size
= mcrypt_get_block_size(
'tripledes'
,
'cbc'
);
$padding_char
=
$block_size
- (
strlen
(
$data
) %
$block_size
);
$data
.=
str_repeat
(
chr
(
$padding_char
),
$padding_char
);
return
$data
;
}
private
function
UnPaddingPKCS7(
$text
)
{
$pad
= ord(
$text
{
strlen
(
$text
) - 1});
if
(
$pad
>
strlen
(
$text
)) {
return
false;
}
if
(
strspn
(
$text
,
chr
(
$pad
),
strlen
(
$text
) -
$pad
) !=
$pad
) {
return
false;
}
return
substr
(
$text
, 0, - 1 *
$pad
);
}
}
?>
|
希望本文所述对大家PHP程序设计有所帮助.
原文链接:https://blog.csdn.net/koastal/article/details/51577321 。
最后此篇关于php DES加密算法实例分析的文章就讲到这里了,如果你想了解更多关于php DES加密算法实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试使用 DES API 来实现 3Des,如下所示: des(input, output, key, mode) 其中输入、输出和 key 各为 8 个字节,模式标识加密和解密类型。我想知道是
有人比较这些加密算法的优缺点吗? 最佳答案 使用 AES。 更多详细信息: DES 是七十年代的旧“数据加密标准”。它的 key 大小对于适当的安全性而言太短(56 个有效位;这可以被暴力破解,如 m
我收到了来自Java的加密字符串,我可以看到Java加密的源代码。我用C#编写了解密代码。但总是在“FlushFinalBlock”处报错。错误消息:“System.Security.Cryptogr
我应该使用加密 DES-EDE3-CBC。这是否意味着它是密码 block 链接模式下的 Triple DES? 最佳答案 是的。 EDE 部分告诉您使用 3DES 的特定变体(无论如何,每个人都默认
有没有人一起比较这些加密算法的优缺点? 最佳答案 使用 AES。 更多细节: DES 是七十年代的旧“数据加密标准”。它的 key 大小对于适当的安全性来说太短了(56 位有效位;这可以被强制执行,正
我在整个网络上寻找这个问题,但找不到明确的答案: 我有一些使用 DESCryptoServiceProvider(Mode = CRC,Padding = none)的 C# 代码,并且我正在使用 o
嗨,大家好,我有 java 代码,它为我生成三重加密代码,现在我尝试使用 crypto-js 在 javascript 上使用它,但这两个代码提供了不同的 key ,我不知道为什么以及如何获得相同的
我需要在我的 Erlang/OTP Web 服务器和 JavaScript 之间传送加密数据。我已经 checkout Crypto-js.js Library 。我想使用 DES 加密我的数据 在
我发现了一个问题,Elephantik 的答案基本上回答了我的问题: DES Initialization Vector in C# 我有一个使用 DES.EXE 命令行工具加密的文件。我可以使用以下
我正在努力让 Java 代码输出与 C# 代码相同的 Byte[]。 C# 代码: using System; using System.IO; using System.Security.Crypt
我从第三方公司收到了一些 DES 加密的东西。我无法用 ruby 解密它。但它适用于我的 java 代码。 这里是java代码: public class Main { public static v
它似乎混淆了 Triple-DES(>128 位)和普通 DES(64 位)。我正在尝试使用 Java 1.5 使用 Triple DES(或 DESede)加密 Derby 数据库 我找到了这个 d
我遇到了编码问题。我想在 HTML 文件中添加法语口音。 我在 Ubuntu 上,我的编辑器是 SciTE。 这是一个 Ruby on Rails 程序。 ActionView::WrongEncod
这个问题已经有答案了: Error parsing XHTML: The content of elements must consist of well-formed character data
我需要加密 ISO 8583消息...这里的问题是消息比 key 长。我需要有人帮我加密这个字符串。 例如:我的字符串中有 300 个字符;我应该单独加密每 16 个字符然后连接它们,因为我的主 ke
我想知道在下面的代码中是否添加了 PKCS#5 填充?如果不是如何添加? $message = "insert plaintext message here"; $iv = pack('H*', '
我已经使用内置库在 Java 中编码了 DES,但我没有得到正确的加密结果。请解释一下我在哪里犯了错误 import javax.crypto.Cipher; import javax.crypto.
在下面,您将看到一个简单的 Java Card 小程序,它被编写为使用不同的 DES 和 3DES 算法加密和解密数据。 这些是支持的命令: 00 C0 00 00 | key 长度 | KeyVal
我在我的应用程序中使用 DES-ECB + base64 加密。这就是我称之为“Crypto”的类的代码 public class Crypto { public static string
我创建了一个 Android 应用程序,它从安装在智能手机上的传感器读取数据,并将这些数据以 JSON 格式发送到应用程序服务器。 我将服务器和 Android 应用程序配置为通过 https 协议(
我是一名优秀的程序员,十分优秀!