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

是 Java 的问题,还是 PHP 的问题?又或者是我的问题?都搞半天了

  •  
  •   richangfan · 2023-07-14 20:11:32 +08:00 · 1106 次点击
    这是一个创建于 504 天前的主题,其中的信息可能已经有所发展或是发生改变。

    j4pQhWlzoubeaF+/wEI6kA==用 Java 解密后得到ok两个字符,PHP 却做不到。Java 代码如下

    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.spec.SecretKeySpec;
    
    import java.nio.charset.Charset;
    import java.security.SecureRandom;
    import java.util.Base64;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            String password = "password";
            byte[] secret = Base64.getDecoder().decode(
                    "j4pQhWlzoubeaF+/wEI6kA==");
    
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            KeyGenerator kg = KeyGenerator.getInstance("AES");
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(password.getBytes());
            kg.init(128, random);
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(kg.generateKey().getEncoded(), "AES"));
            byte[] result = cipher.doFinal(secret);
            System.out.print(new String(result, Charset.forName("UTF-8")));
        }
    }
    
    4 条回复    2023-07-15 05:54:08 +08:00
    richangfan
        1
    richangfan  
    OP
       2023-07-14 20:12:42 +08:00
    用下面的 PHP 代码只能得到 false
    ```
    var_export(openssl_decrypt(base64_decode('j4pQhWlzoubeaF+/wEI6kA=='), 'aes-128-ecb', 'password', OPENSSL_RAW_DATA));
    ```
    dedemao
        2
    dedemao  
       2023-07-14 20:49:39 +08:00   ❤️ 3
    ```
    $sKey = substr(openssl_digest(openssl_digest('password', 'sha1', true), 'sha1', true), 0, 16);
    echo openssl_decrypt(base64_decode('j4pQhWlzoubeaF+/wEI6kA=='), 'AES-128-ECB', $sKey, OPENSSL_RAW_DATA);
    ```
    richangfan
        3
    richangfan  
    OP
       2023-07-14 20:56:18 +08:00
    @dedemao
    可以啊,厉害厉害
    jhdxr
        4
    jhdxr  
       2023-07-15 05:54:08 +08:00
    @richangfan 你之前的 php 实现忽略了 SecureRandom.getInstance("SHA1PRNG"); 这一段
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:46 · PVG 15:46 · LAX 23:46 · JFK 02:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.