V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zealinux
V2EX  ›  程序员

大家可有简单的加解密算法推荐?

  •  
  •   zealinux · 2021-08-11 12:20:33 +08:00 · 2900 次点击
    这是一个创建于 961 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为了数据安全,现在客户要求在配置中心里的敏感数据也要加密,

    比如一些平台的 AK/SK,微信的 ApiKey 等。

    那么配置中心不能直接存明文,只存加密后的字符串。 然后 Java 应用程序里解密后再使用。

    大家可有推荐的简单的加解密方法推荐?

    19 条回复    2021-08-12 18:52:32 +08:00
    huangmingyou
        1
    huangmingyou  
       2021-08-11 12:22:53 +08:00
    vault
    Building
        2
    Building  
       2021-08-11 12:23:41 +08:00 via iPhone
    最简单的: 映射。
    opentrade
        3
    opentrade  
       2021-08-11 12:30:03 +08:00
    RichardYyf
        4
    RichardYyf  
       2021-08-11 12:33:17 +08:00
    我们用的是 jasypt,集成在我们的 apollo 组件里面,apollo 中心里面是密文,密文会包装成固定格式,更新配置的时候根据正则判断是否是加密字符串再去解密
    GM
        5
    GM  
       2021-08-11 13:08:07 +08:00
    rc4,加解密一个函数二十行代码搞定,任何流行语言都有实现。
    jorneyr
        6
    jorneyr  
       2021-08-11 13:19:15 +08:00
    SpringBoot 或者 SpringMVC 的话,Jasypt 比较方便,可参考 http://qtdebug.com/spring-boot-jasypt
    CrazyRundong
        7
    CrazyRundong  
       2021-08-11 15:35:27 +08:00 via iPhone
    加密敏感数据挺 tricky 的,需要同时保证数据的秘密性和完整性,即 authenticated encryption (AE)

    正确地实现 AE 非常难,楼主可以搜下 Java 下有没有可信赖的现有实现,毕竟密码学的基本原则之一就是不要自己造轮子。我自己之前的玩具项目用的是 Python cryptography 库的 Fernet 实现
    GeruzoniAnsasu
        8
    GeruzoniAnsasu  
       2021-08-11 15:38:02 +08:00
    不要造轮子。
    现成的流密码选一个,块密码选一个,非对称选一个,然后直接用现成的密码学库。


    基本只有一样事情要思:怎么藏密钥
    skinny
        9
    skinny  
       2021-08-11 15:40:17 +08:00
    chacha20poly1305 呗,aes256-gcm 也行
    calming
        10
    calming  
       2021-08-11 15:43:17 +08:00
    直接 AES 一把梭
    qwerthhusn
        11
    qwerthhusn  
       2021-08-11 15:43:54 +08:00
    直接标准的 AES 就行了啊
    自己封装个 AES 加解密的方法就行了啊。
    RRRoger
        12
    RRRoger  
       2021-08-11 15:44:15 +08:00
    凯撒加密
    copymaster
        13
    copymaster  
       2021-08-11 15:46:39 +08:00
    @GeruzoniAnsasu 太对了,密码被破译根本不是我们应该考虑的,我们只需要做好储存密钥,交换密钥这两件事做好那么就算是'绝对安全'了
    zhangxh1023
        15
    zhangxh1023  
       2021-08-12 09:40:06 +08:00
    那么问题来了,怎么存储这个解密的密钥,直接写死在程序里面吗
    hhjswf
        16
    hhjswf  
       2021-08-12 09:50:28 +08:00
    加密到底是防谁?如果配置中心都被外人捅烂了...,那这也太拉垮了...防自己人,显然也不太能防的住,相当于掩耳盗铃
    Rever1e
        17
    Rever1e  
       2021-08-12 13:09:23 +08:00
    用 aes 加密内容
    Vigenere(sha256( 你所想的密码),aes 密钥)
    刚好可以一位对一位的偏移 aes 密钥
    a1274598858
        18
    a1274598858  
       2021-08-12 14:47:09 +08:00
    SM4
    zgk
        19
    zgk  
       2021-08-12 18:52:32 +08:00 via iPhone
    如果只是加密一段简短的 key 的话,可以直接用 xor 运算,只要密钥比原文长就可以,密钥可以随机生成一段。

    加密:密文 = 原文 xor 密钥
    解密:原文 = 密文 xor 密钥

    原理是 Vernam 密码,参考:
    https://0xffff.one/d/1043
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2815 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:30 · PVG 21:30 · LAX 06:30 · JFK 09:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.