Шифрую с помощью открытого ключа, дешифрую с помощью закрытого.
часть данных шифруется и дешифруется хорошо, другая часть выдает ошибки
получаю ошибки всегда в рандомном месте
вывод через цикл одного и того-же текста:
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block
type is not 02 error:04065072:rsa
routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
354 -> Exception: DECODE
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
354 -> Exception: DECODE
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02
error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
Текст, который надо шифровать -> string(354) -> Текст, который надо шифровать
вызываю
$txt = 'Текст, который надо шифровать';
for ($t=0;$t<30;$t++) {
try {
echo $txt, ' -> ';
$except = 'ENCODE';
$crypt_name = encode($txt);
echo strlen($crypt_name), ' -> ';
$except = 'DECODE';
$uname = decode($crypt_name);
echo $uname, PHP_EOL;
}
catch (Exception $e){
echo 'Exception: ',$except, PHP_EOL;
while ($msg = openssl_error_string())
echo $msg,PHP_EOL;
}
}
сами функции
шифрование
public function encode($data, $options=null) {
if (!is_string($data))
throw new InvalidArgumentException(sprintf('Argument $data must be a string, %s given', gettype($data)));
$options = (array) $options;
// с помощью открытого ключа
if (empty($options['usePrivateKey'])) {
if (!is_resource($this->public_key_resource))
throw new RuntimeException('The public key is not installed');
$encryptFunction = 'openssl_public_encrypt';
$encryptKey = $this->public_key_resource;
$encryptBlockSize = floor(($this->public_key_bits / 8) * .9);
}
// с помощью закрытого ключа
else {
if (!is_resource($this->private_key_resource))
throw new RuntimeException('The private key is not installed');
$encryptFunction = 'openssl_private_encrypt';
$encryptKey = $this->private_key_resource;
$encryptBlockSize = floor(($this->private_key_bits / 8) * .9);
}
$offset = 0;
$encrypted = '';
while ($part = substr($data, $offset * $encryptBlockSize, $encryptBlockSize)) {
if (!$encryptFunction($part, $partenc, $encryptKey, OPENSSL_PKCS1_PADDING)) {
$exception_msg = 'Error encrypting data';
// while ($msg = openssl_error_string()) $exception_msg .= PHP_EOL . $msg;
throw new RuntimeException($exception_msg);
}
$encrypted .= $partenc;
$offset++;
}
return $encrypted;
}
дешифрование
public function decode($data, $options=null) {
if (!is_string($data))
throw new InvalidArgumentException(sprintf('Argument $data must be a string, %s given', gettype($data)));
$options = (array) $options;
// с помощью открытого ключа
if (empty($options['usePublicKey'])) {
if (!is_resource($this->private_key_resource))
throw new RuntimeException('The private key is not installed');
$decryptFunction = 'openssl_private_decrypt';
$decryptKey = $this->private_key_resource;
$decryptBlockSize = $this->private_key_bits/ 8;
}
// с помощью закрытого ключа
else {
if (!is_resource($this->public_key_resource))
throw new RuntimeException('The public key is not installed');
$decryptFunction = 'openssl_public_decrypt';
$decryptKey = $this->public_key_resource;
$decryptBlockSize = $this->public_key_bits/ 8;
}
$offset = 0;
$decrypted = '';
while ($partenc = substr($data, $offset * $decryptBlockSize, $decryptBlockSize)) {
if (!$decryptFunction($partenc, $part, $decryptKey, OPENSSL_PKCS1_PADDING)) {
$exception_msg = 'Error decrypting data';
// while ($msg = openssl_error_string()) $exception_msg .= PHP_EOL . $msg;
throw new RuntimeException($exception_msg);
}
$decrypted .= $part;
$offset++;
}
return $decrypted;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно, чтобы вместо message прикреплялся готовый файл с сервера и отправлялся mail()Или есть другое решение ?
подскажите почему не работает своя функция в opecart 20 делаю так в контролере: