标签: mcrypt

为什么这些奇怪的字符出现在mcrypt中?

我成功加密和解密,但是当我解密该值时,字符串末尾会出现奇怪的字符" ".最初$_POST['value']没有空格或任何奇怪的字符.

我怎么解决这个问题?

我用这个加密:

$key = 'my key';
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);        
$id = mcrypt_generic($td, $_POST['value']);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
Run Code Online (Sandbox Code Playgroud)

我用这个解密:

$key = 'my key';
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$id = mdecrypt_generic($td, $_COOKIE['value']);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
Run Code Online (Sandbox Code Playgroud)

php mcrypt mojibake

3
推荐指数
1
解决办法
6396
查看次数

如何处理字符串中的特殊字符

我有一个PHP脚本创建一个编码值,例如:

m>^æ–S[J¯vÖ_ÕÚuÍÔ'´äœÈ‘ ®@M©t²#÷[Éå¹UçfU5T°äÙ“©”ˆÇVÝ] [’e™a«Ã°7#dÉJ>
Run Code Online (Sandbox Code Playgroud)

然后我需要在vb.net应用程序中解码这个问题是上面的值可以有任何字符.VB.net无法处理它:

dim strCryptedString As String = 'm>^æ–S[J¯vÖ_ÕÚuÍÔ'´äœÈ‘ ®@M©t²#÷[Éå¹UçfU5T°äÙ“©”ˆÇVÝ] [’e™a«Ã°7#dÉJ>"
Run Code Online (Sandbox Code Playgroud)

那么任何建议如何处理这个价值?

string encryption variables mcrypt

3
推荐指数
1
解决办法
1699
查看次数

PHP Mcrypt - Decrypt函数不适用于一小部分字符串

我知道PHP的mcrypt_decrypt已经有一百万个帖子了,但是我找不到一个与我的结果相同的帖子.我有一对简单的加密/解密函数,我想用它来对数据执行双向加密.奇怪的是,对于我提供给函数的任何随机字符串的大约4%,它将不会成功解密.例如,如果我创建一个从0到9999的"for循环",并加密和解密这些数字的字符串版本,则每次都会失败相同的值,这些值取决于我传入函数的键.我可以传递任何密钥,虽然失败的具体值会发生变化,但失败的值的百分比将保持大致不变.

我已经尝试了没有IV参数的ECB模式,并且我尝试了带有IV参数的CBC模式,它产生了相同的结果.

这是我在ECB模式下的加密功能:

function mc_encrypt($string, $mc_key) {
    $passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($string), MCRYPT_MODE_ECB));
    $encode = base64_encode($passcrypt);

    return $encode;
}
Run Code Online (Sandbox Code Playgroud)

这是我在ECB模式下的解密功能:

function mc_decrypt($string, $mc_key) {
    $decoded = base64_decode($string);
    $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($decoded), MCRYPT_MODE_ECB));

    return $decrypted;
}
Run Code Online (Sandbox Code Playgroud)

CBC模式版本是相同的,除了它使用mcrypt_create_iv()函数在加密中创建IV,并将其作为解密中的参数传递.

在我的服务器上使用这些函数并使用'abc'作为测试加密密钥,如果我从0运行到300,则以下值将无法正确解密:

4,6,70,145,151,176,237,254,275

如果我将加密密钥更改为其他内容,它将更改哪些值正确返回,但不会更改值返回的频率.

有什么建议???

提前致谢!

php mcrypt

3
推荐指数
1
解决办法
1874
查看次数

PHP 将 MCRYPT_ENCRYPT 转换为 OPENSSL_ENCRYPT(SOAP 标头)

我需要加密一些 SOAP 标头字段,并且我目前在使用 PHP 5.6 版本的项目中使用以下代码。

function getBaseEncoded($data, $key)
{
    $size       = $this->pkcs5_pad($data, mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB));
    $iv         = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $result     = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $size, MCRYPT_MODE_ECB, $iv);

    return trim(base64_encode($result));
}

private function pkcs5_pad($text, $blocksize) 
{
   $pad = $blocksize - (strlen($text) % $blocksize);
   return $text . str_repeat (chr($pad), $pad);
}
Run Code Online (Sandbox Code Playgroud)

发生的情况是,现在我手头有一个类似的项目,但使用 PHP 7,并且不推荐使用 MCRYPT 函数,我需要将其切换到 OPENSSL_ENCRYPT。

下面的代码是我的第一次尝试:

function getBaseEncoded($data, $key)
{
    $result = openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);

    return trim(base64_encode($result));
}
Run Code Online (Sandbox Code Playgroud)

但我现在收到一个 SOAP 错误消息

SoapFault => 无法连接到主机

它让我思考问题是否出在我的新功能上?

php openssl mcrypt

3
推荐指数
1
解决办法
2734
查看次数

在 Ubuntu 上安装 php5-mcrypt

我想在 vagrant 机器上安装 mcrypt。

操作系统是 Ubuntu。

哪个是命令?

php ubuntu mcrypt

3
推荐指数
1
解决办法
1万
查看次数

PHP:mcrypt将字符串的开头变为垃圾

我需要在服务器端进行中到强加密,所以我想我会在PHP中使用mcrypt.如果我使用下面的函数,原始字符串的开头会在解密后变成二进制垃圾.(这不是额外添加垃圾的常见问题,而是我的字符串被更改.)根据文档,mcrypt_encrypt()应该填充足够的字符以匹配所选算法的块大小,但我怀疑它不起作用.

但是,如果我手动将其填充到Rijndael的128位(16字节)的块大小,它也不起作用.我可以使这个工作的唯一方法是通过预先填充一些足够长的字符串(可能)覆盖带状块,并在该字符串和我的数据之间添加一个已知的前缀,如"DATA#".解密后,该块已被部分损坏,但我的前缀和之后的所有数据都已正确解密.

$GLOBALS['encryptionmarker'] = 'DATA#';

function encrypt($plain, $key) {
    /*
    // workaround because beginning of decrypted string is being mangled
    // so we simply prefix with some text plus marker
    $prefix = str_pad('', 128, '#', STR_PAD_RIGHT).$GLOBALS['encryptionmarker'];
    $plain = $prefix.$plain;
    */

    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $plain, MCRYPT_MODE_CFB,
        mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB),
        MCRYPT_DEV_URANDOM));

    return $encrypted;
}

function decrypt($encrypted, $key) {
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CFB,
        mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB),
        MCRYPT_DEV_URANDOM));

    /*
    // workaround: remove garbage
    $pos = strpos($decrypted, $GLOBALS['encryptionmarker']);
    $decrypted = …
Run Code Online (Sandbox Code Playgroud)

php encryption cryptography mcrypt

2
推荐指数
1
解决办法
2021
查看次数

AES rijndael在c和java之间加密

我对c和Java之间的加密/解密感到疯狂,但到目前为止,Java中的加密字符串和c中的加密字符串看起来并不相同.我已经调查了base64编码/解码但是在疯狂地找到java和c的库后,各自的base64结果看起来不同了!我认为这是在Java UTF16字符串之间进行转换,在java中保存字节或者AES选项(128/256密钥,PK5填充或谁知道什么),或者终端的UTF8转换或上述荒谬组合之间的转换问题.到目前为止,我得到:

  user1@comp1:~/Desktop$ gcc AES.c /usr/lib/libmcrypt.a -lssl -lcrypto -lpthread
  user1@comp1:~/Desktop$ /usr/java/jdk1.6.0_25/bin/javac AES.java
  user1@comp1:~/Desktop$ ./a.out 
      Before encryption: test text 123
      After encryption: 49 -60 66 43 -8 66 -106 0 -14 -44 3 47 65 127 -110 117 
      After decryption: test text 123
  user1@comp1:~/Desktop$ java AES 
     Before encryption: test text 123
     After encryption: -110 21 23 59 47 120 70 -93 -54 -93 -12 -70 -91 83 -113 85 
     After decryption: test text 123
Run Code Online (Sandbox Code Playgroud)

我认为我真的需要帮助从某人到低级编码,下面分别是Java和c的代码:

import java.security.MessageDigest;
import java.util.Arrays;
import javax.crypto.KeyGenerator; …
Run Code Online (Sandbox Code Playgroud)

c java cryptography aes mcrypt

2
推荐指数
1
解决办法
1万
查看次数

在php中加密和解密word docx文件的问题

我尝试使用php mcrypt TripleDES加密docx格式文件.

当我试图解密文件时,我得到如下错误.

无法打开Office Open XML文件file_name,因为内容存在问题.

这是下面的代码

function Encrypt($source,$key,$iv) {
      $cipher = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
      mcrypt_generic_init($cipher, $key, $iv);
      $result = mcrypt_generic($cipher, $source);
      mcrypt_generic_deinit($cipher);
      return $result;
}


function Decrypt($source,$key,$iv) {

  $cipher = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', ''); 
  mcrypt_generic_init($cipher, $key, $iv);
  $result = mdecrypt_generic($cipher, $source);
  mcrypt_generic_deinit($cipher);
  return $result;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

php encryption mcrypt

2
推荐指数
1
解决办法
4960
查看次数

laravel可以在没有mcrypt的情况下工作吗?

Laravel在本地运行良好,但在服务器上我得到以下内容:

Laravel需要Mcrypt PHP扩展.

但是我无法在我的服务器上安装mcrypt,因为我没有管理员权限.在我公司的服务器上安装模块的过程将是痛苦的,最好只使用另一个框架.但是Laravel看起来如此现代和漂亮,如果不问这个问题我就不能放手:在没有php-mcrypt的情况下运行Laravel是否有可能?

php mcrypt laravel

2
推荐指数
1
解决办法
2436
查看次数

用PHP mcrypt加密后用Javascript CryptoJS解密AES

使用mcrypt在PHP中加密

<?php
$string = 'Secret Message';
$key = 'd4b494e4502a62edd695a903a94c2701';
$iv = '02f30dffbb0d084755f438f7d8be4a7d';

$encrypted = base64_encode(
    mcrypt_encrypt(
        MCRYPT_RIJNDAEL_256,
        $key,
        $string,
        MCRYPT_MODE_CBC,
        $iv
    )
);
//$encrypted results in 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg='
?>
Run Code Online (Sandbox Code Playgroud)

使用CryptoJS在Javascript中解密

<script>
var encrypted = 'nYoFAiyDARVSI09lH/IPdim5TvE51izVjk6sc2AK9Rg=';
var key = CryptoJS.enc.Hex.parse('d4b494e4502a62edd695a903a94c2701');
var iv = CryptoJS.enc.Hex.parse('02f30dffbb0d084755f438f7d8be4a7d');

var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});

console.log(decrypted.toString(CryptoJS.enc.Utf8)); //prints an empty string
</script>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何让Javascript端吐出原始文本.

javascript encryption aes mcrypt cryptojs

2
推荐指数
1
解决办法
4573
查看次数