gpg:[不知道]:部分长度对于数据包类型 20 无效

问题描述 投票:0回答:2

我正在使用 Kleopatra 加密笔记本电脑中的文件,并想在 Azure Databricks 中解密它,但失败了。

我认为这是由于databrick中的GPG版本是2.2.19

与 GPG 版本 2.4.0 不兼容

下面是我在Databricks中的解密代码:

%sh
gpg --no-tty --batch --import /dbfs/mnt/TestDatalake/config_decrypt/Test20230105RSA_private_SECRET.asc
mkdir -p /dbfs/mnt/TestDatalake/decrypted_file
gpg --no-tty --batch --yes --ignore-mdc-error --pinentry-mode=loopback --passphrase-fd 1 --passphrase-file /dbfs/mnt/TestDatalake/config_decrypt/20230104Test_passphase.txt  -vvd --output /dbfs/mnt/TestDatalake/decrypted_file/DTestPGP.csv --decrypt /dbfs/mnt/TestDatalake/config_decrypt/feature_name_mapping_testRSA.csv.gpg

是否有任何简单的方法来升级 Databricks gpg 版本或转换密钥以适应 GPG 版本 2.2.19 格式?

encryption azure-databricks compatibility gnupg
2个回答
3
投票

GnuPG 2.3+ 使用 AEAD 算法(= 数据包类型 20)生成密钥,并且 GnuPG 2.3+ 默认情况下使用此算法进行加密。然而,迄今为止,虽然 AEAD 被提议成为 OpenPGP 标准的一部分,但尚未获得批准(请参阅OpenPGP 消息格式草案 rfc4880bis-10)。我相信它尚未得到广泛支持。基于 GnuPG 的应用程序通常仍然在底层使用 GnuPG 2.2,正如您自己发现的那样。

如果

  • 您无法升级接收者的 GnuPG
  • 和/或您想根据 OpenPGP 标准进行加密
  • 和/或您想保持与大多数 PGP 软件的兼容性

然后在生成密钥时使用 GnuPG 2.3+ 中的

--rfc4880
--openpgp
标志。两个标志可以同义使用。


仅供参考

带有关联数据的身份验证加密 (AEAD) 模式可以将一些额外的明文或关联数据混合到用于验证的标签中,以便可以检测并拒绝在不同上下文中重新使用有效密文的尝试。


0
投票

我尝试查看使用的版本

%sh
gpg --version

我得到以下输出:

enter image description here

我尝试使用升级gpg的版本

%sh
apt-get install gpg 

我得到以下输出:

enter image description here

据我所知,根据输出 Databricks 可能仅支持 gpg 2.2.19 版本。我们无法升级它。我们需要在 Microsoft Q&A 中报告它。

我们可以使用Databricks中的python包gnupg来解密.gpg解密文件。为此,我使用

在 python 笔记本中安装了 gnupg 包
 pip install gnupg

enter image description here

我运行下面的代码来解密 .gpg 文件

import gnupg
gpg = gnupg.GPG('<filepath>')
with open('<filename.gpg extention>', 'rb') as f:
    status = gpg.decrypt_file(f, passphrase='<passpharse>', output='<outputfilename>')
    print ('ok: ', status.ok)
    print ('status: ', status.status)
    print ('stderr: ', status.stderr)

输出:

enter image description here

这对我有用。你可以按照这个方法尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.