首页 > 数据库 >AutoMySQLBackup加密备份解密问题浅析

AutoMySQLBackup加密备份解密问题浅析

时间:2024-05-14 12:08:44浏览次数:13  
标签:enc 加密 AutoMySQLBackup 解密 openssl pass encrypt CONFIG 浅析

AutoMySQLBackup备份配置了加密选项过后,它会将数据库的备份文件加密。测试解密这些加密的备份文件时遇到错误(密钥做了脱敏处理)。

$ openssl enc -aes-256-cbc -d -in  daily_mysql_2024-05-14_09h09m_Tuesday.sql.gz.enc \
>   -out daily_mysql_2024-05-14_09h09m_Tuesday.sql.gz -pass pass:********
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
bad decrypt
140587404826432:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:643:

其中加密的密钥是正确的,但是每次都会提示下面错误信息:

*** WARNING : deprecated key derivation used. Using -iter or -pbkdf2 would be better. bad decrypt 140587404826432:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:643:

这里加密和解密都位于同一台服务器上,所以openssl的版本都是一样的,不会因为openssl版本导致这类问题,openssl的具体版本信息如下所示:

$ openssl version
OpenSSL 1.1.1k  FIPS 25 Mar 2021

看了一下AutoMySQLBackup的加密文件的代码,如下所示,它使用openssl进行加密。

# @info: This function is called after data has already been saved. It performs encryption and
#   hardlink-copying of files to a latest folder.
# @return: flags
# @deps: load_default_config
files_postprocessing () {
 local flags
 let "flags=0x00"
 let "flags_files_postprocessing_success_encrypt=0x01"

 # -> CONFIG_encrypt
 [[ "${CONFIG_encrypt}" = "yes" && "${CONFIG_encrypt_password}" ]] && {
   if (( $CONFIG_dryrun )); then
     printf 'dry-running: openssl enc -aes-256-cbc -pbkdf2 -iter 1000 -e -in %s -out %s.enc -pass pass:%s\n' ${1} ${1} "${CONFIG_encrypt_password}"
   else
     openssl enc -aes-256-cbc -pbkdf2 -iter 1000 -e -in ${1} -out ${1}.enc -pass pass:"${CONFIG_encrypt_password}"
     if (( $? == 0 )); then
    if rm ${1} 2>&1; then
      echo "Successfully encrypted archive as ${1}.enc"
      let "flags |= $flags_files_postprocessing_success_encrypt"
    else
      echo "Successfully encrypted archive as ${1}.enc, but could not remove cleartext file ${1}."
      let "E |= $E_enc_cleartext_delfailed"
    fi
     else
    let "E |= $E_enc_failed"
     fi
   fi
 }
 # <- CONFIG_encrypt

 # -> CONFIG_mysql_dump_latest
 [[ "${CONFIG_mysql_dump_latest}" = "yes" ]] && {
   if (( $flags & $flags_files_postprocessing_success_encrypt )); then
  if (( $CONFIG_dryrun )); then
    printf 'dry-running: cp -al %s.enc %s/latest/\n' "${1}" "${CONFIG_backup_dir}"
  else
    cp -al "${1}.enc" "${CONFIG_backup_dir}"/latest/
  fi
   else
  if (( $CONFIG_dryrun )); then
    printf 'dry-running: cp -al %s %s/latest/\n' "${1}" "${CONFIG_backup_dir}"
  else
    cp -al "${1}" "${CONFIG_backup_dir}"/latest/
  fi
   fi
 }
 # <- CONFIG_mysql_dump_latest

 return $flags
}

具体加密的代码如下所示

openssl enc -aes-256-cbc -pbkdf2 -iter 1000 -e -in ${1} -out ${1}.enc -pass pass:"${CONFIG_encrypt_password}"

这里使用对称加密,它使用了参数-pbkdf2和-iter。 这两个参数的介绍如下所示:

-iter +int          Specify the iteration count and force use of PBKDF2
-pbkdf2             Use password-based key derivation function 2

这里使用迭代次数和pbkdf2的算法来增加安全性,所以解密的时候,也必须使用上面两个参数,否则就会报错,测试如下,所以遇到这个错误,是因为解密时我们没有使用正确的参数导致。执行使用下面命令就能正确解压加密文件了。

$ openssl enc -aes-256-cbc -d -in  daily_mysql_2024-05-14_09h09m_Tuesday.sql.gz.enc \
>   -out daily_mysql_2024-05-14_09h09m_Tuesday.sql.gz -pbkdf2 -iter 1000 -pass pass:*****
$ ls
daily_mysql_2024-05-14_09h09m_Tuesday.sql.gz  daily_mysql_2024-05-14_09h09m_Tuesday.sql.gz.enc

标签:enc,加密,AutoMySQLBackup,解密,openssl,pass,encrypt,CONFIG,浅析
From: https://www.cnblogs.com/kerrycode/p/18191044

相关文章

  • 城市三维模型CIM轻量化技术浅析
    城市三维模型CIM轻量化技术浅析 城市三维模型CIM(CityInformationModeling)是在数字化时代中,为城市规划、管理和可视化提供重要支持的关键工具。然而,大规模的城市模型往往具有复杂的几何结构和庞大的数据量,给数据存储、计算和可视化带来了挑战。为了解决这个问题,CIM的轻量......
  • 浅析OSERDESE3
    在高速接口的应用场景下,我们会经常听说SerDes(Serializer-Deserializer)这个词,也就是串行器和解串器,更为通俗的讲就是进行串并转换的。在Xilinx的FPGA中提供了ISERDES(提供串行数据到并行数据的转换)和OSERDES(提供并行数据到串行数据的转换)。在7系列的FPGA里面提供了ISERDESE2和OSER......
  • 深入探索JavaScript中的structuredClone:现代深拷贝的解密指南
    在JavaScript中,实现深拷贝的方式有很多种,每种方式都有其优点和缺点。今天介绍一种原生JavaScript提供的structuredClone实现深拷贝。下面列举一些常见的方式,以及它们的代码示例和优缺点:1.使用JSON.parse(JSON.stringify(obj))代码示例:functiondeepClone(obj){re......
  • 国际化业务、全球化团队沟通难?浅析跨文化沟通的挑战和应对措施
    在全球化背景下,发展出海业务相比以往更具有巨大的前景和潜力,是企业寻找“第二增长点”和提升综合实力的优先选择。近几年“中企出海”大热,中国企业在世界各地开展业务拓展国际市场,获得更加国际化的营商经验与客户资源。与此同时,用全球化团队来开展业务是不二之选,团队汇集不同文化......
  • RequestBodyAdvice用法详解-参数加解密示例
     在实际项目中,我们常常需要在请求前后进行一些操作,比如:参数解密/返回结果加密,打印请求参数和返回结果的日志等。这些与业务无关的东西,我们不希望写在controller方法中,造成代码重复可读性变差。这里,我们讲讲使用@ControllerAdvice和RequestBodyAdvice、ResponseBodyAdvice来对请......
  • 为 jsencrypt 增加私钥加密公钥解密的方法逻辑
    首先声明,使用RSA非对称加密,正常的使用情景是公钥加密、私钥解密。因为正常使用情景下,公钥是公开的,如果将私钥加密的数据发出去,使用公钥解密,其实理论上并没有起到加密的作用。私钥加密、公钥解密的使用场景是在于防篡改,确定私钥发来的数据是正确的。其实某种程度来说,确实就没......
  • 基于nodeje的RSA加解密
    RAS是一种非对称加密,可以用公钥加密,私钥解密也可以反过来用私钥加密,公钥解密;以下是其实现方式,与java后台匹配,实现双向加解密。/***RSA最大加密明文大小*/constMAX_ENCRYPT_BLOCK=245;/***RSA最大解密密文大小*/constMAX_DECRYPT_BLOCK=256;通过fs.readFil......
  • [转]Cocos2dlua手游 Lua解密与资源解密实战
    来自看雪:Cocos2dlua手游Lua解密与资源解密实战https://mp.weixin.qq.com/s/WeYxlXZvCPv_3nGgeKdunw Cocos2dlua逆向相关学习,略有删减,直接进入正文APK大致如下:.├──assets│├──res││├──ani│││└──logo│││└─......
  • 线程池核心原理浅析
    前言由于系统资源是有限的,为了降低资源消耗,提高系统的性能和稳定性,引入了线程池对线程进行统一的管理和监控,本文将详细讲解线程池的使用、原理。为什么使用线程池池化思想线程池主要用到了池化思想,池化思想在计算机领域十分常见,主要用于减少资源浪费、提高性能等。池化思想......
  • AI智能分析视频监控系统现状与应用场景浅析
    随着人工智能技术的快速发展,智能视频监控系统在安全监管工作中发挥着越来越重要的作用,为企业的安全生产管理提供了强有力的支持,也为企业在安全生产管理上大大提高了安全指数。那么目前安防视频分析的现状与应用场景有哪些呢?一、行业现状当前,智能视频分析技术通过利用计算机视觉......