请教各位,有什么加密算法是输入明文和输出密文长度等长呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
heavyrainn
V2EX    程序员

请教各位,有什么加密算法是输入明文和输出密文长度等长呢?

  •  
  •   heavyrainn 2020-03-13 07:23:08 +08:00 6173 次点击
    这是一个创建于 2123 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在研究一些数据加密的东西,例如从一个环境把数据加密扔到另外一个环境去做分析。其中有一个场景是数据库加密交互,假设生产环境导出加密数据给开发环境,这里要求加密后的密文需要与输入的明文等长,因为在业务上有一些硬性规定,例如机位码必须是 16 位等等,请问有什么加密算法能够实现呢?谢谢大家
    18 条回复    2022-03-05 09:42:18 +08:00
    geelaw
        1
    geelaw  
       2020-03-13 07:31:23 +08:00 via iPhone
    你需要的是确定性加密( deterministic encryption )。有现成实现的加密算法通常具有 CPA 安全性(实际上一般是 AEAD 或 CCA ),密文必须比明文长,所以很可能需要自己造轮子。
    areless
        2
    areless  
       2020-03-13 07:41:40 +08:00 via Android
    大部分对称加密加密后占用字节数是一样的。只是转 hex 或者 base64 以及 asc,比字节码表示要长 。
    loading
        3
    loading  
       2020-03-13 07:56:41 +08:00
    不安全的 AES 可以了解一下,结合 AES 做点内部修改,凑合用一下?
    yzwduck
        4
    yzwduck  
       2020-03-13 08:33:51 +08:00
    所有的流加密 / stream cipher 都能保证密文长度与明文相同。
    使用 OFB 或 CTR 模式的块加密 / block cipher 也可以做到输入输出长度相同,不过前提是把初始向量 IV 当作密钥的一部分。
    如果不介意密文长度比明文多十几字节的话,大部分对称加密都能满足需求。

    PS: 我不知道你打算如何管理密钥,如果设计 / 管理不善,加密就形同虚设;
    PS2: 做分析的话,应该考虑一下差分隐私这种方法。传统的对称加密不一定能保护这种数据的机密性。
    xuanbg
        5
    xuanbg  
       2020-03-13 08:34:59 +08:00
    位交换算法的输出和输入等长,但没有密钥,任何人只要知道算法都可以解密。
    passerbytiny
        6
    passerbytiny  
       2020-03-13 08:47:31 +08:00
    别得不懂,但是密文与明文等长,看你的情况还是特定数据段的密文恒定长度,这样情况下解密的难度是成比例缩小的。

    话说你举例的场景是分析密文来判断原始环境的情况,这样的情况下我感觉:加密的好就分析不出东西,能分析出东西加密就是脱裤子放屁。这种场景,脱敏比加密好用。
    jinliming2
        7
    jinliming2  
       2020-03-13 09:00:58 +08:00 via iPhone
    简单的:凯撒密码……这个密码就是一个数字,明文和密文肯定等长。
    或者直接循环 xor,密码可以是任意长度的字符串,明文和密文也肯定等长。
    当然,这两种的安全性就难说了……
    SoloCompany
        8
    SoloCompany  
       2020-03-13 09:02:51 +08:00
    基本上所有 block cipher 都能满足你的需求, 只要满足输入时 blocksize 的整数倍 (一般都是 16 或 32), 加密过程 (cipher) 和 padding 算法一般都是独立的, 使用 no padding 或直接使用裸的 cipher 来实现
    reus
        9
    reus  
       2020-03-13 09:13:42 +08:00 via Android
    直接用 gcm-aes-256
    wordsman
        10
    wordsman  
       2020-03-13 09:16:56 +08:00
    确定性加密可以用模糊算法和语言常用字词匹配破解的,二战时期就能做到了
    DGideas
        11
    DGideas  
       2020-03-13 09:22:17 +08:00
    赞同 #7,请考虑密钥长度大于等于原文的 XOR 算法。

    对于一次一密码本的 XOR 算法,只要密钥的生成足够具有随机性,该算法是密码学安全的。
    ETiV
        12
    ETiV  
       2020-03-13 10:04:21 +08:00 via iPhone
    等长最简单了,给每个字节 XOR
    jimzhong
        13
    jimzhong  
       2020-03-13 11:04:48 +08:00
    在没有 Authentication 需求侠,Block cipher 可以用 Ciphertext stealing mode 实现 LZ 的需求。
    l404864087
        14
    l404864087  
       2020-03-13 11:18:42 +08:00
    凯撒加密..
    kuro1
        15
    kuro1  
       2020-03-13 11:34:45 +08:00
    AES-CTR,把 VI 作为密钥的一部分
    contmonad
        16
    contmonad  
       2020-03-13 13:39:20 +08:00
    赞同 @yzwduck #4。另外字段太短就没法用 ciphertext stealing 了。
    TransAM
        17
    TransAM  
       2020-03-13 13:57:18 +08:00 via Android
    保证安全的话,只能是一次性密码本了。。
    louted
        18
    louted  
       2022-03-05 09:42:18 +08:00
    chacha20/rc4
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2982 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:26 PVG 21:26 LAX 05:26 JFK 08:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86