在PHP/Java中使用以下AES加密库安全吗?

在PHP/Java中使用以下AES加密库安全吗?,java,php,security,cryptography,aes,Java,Php,Security,Cryptography,Aes,当我搜索AES加密/解密实现时,我在SO中找到了一些问题链接,如下所示: 我还发现了下面的网页,它提供了在PHP和Java中易于使用的AES加密/解密算法的实现 问题:直接在我们的实时开发项目中使用AES实现库是否安全 这可能需要您完成源代码的实现。因此,由于PHP实现看起来比较长,下面我将介绍该库的Java源代码的基本部分 import java.io.UnsupportedEncodingException; import java.security.MessageDigest; i

当我搜索AES加密/解密实现时,我在SO中找到了一些问题链接,如下所示:

  • 我还发现了下面的网页,它提供了在PHP和Java中易于使用的AES加密/解密算法的实现

    问题:直接在我们的实时开发项目中使用AES实现库是否安全

    这可能需要您完成源代码的实现。因此,由于PHP实现看起来比较长,下面我将介绍该库的Java源代码的基本部分

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    import org.apache.commons.codec.binary.Base64;
    /**
    Aes encryption
    */
    public class AES
    {
    
        private static SecretKeySpec secretKey ;
        private static byte[] key ;
    
        private static String decryptedString;
        private static String encryptedString;
    
        public static void setKey(String myKey){
    
    
            MessageDigest sha = null;
            try {
                key = myKey.getBytes("UTF-8");
                System.out.println(key.length);
                sha = MessageDigest.getInstance("SHA-1");
                key = sha.digest(key);
                key = Arrays.copyOf(key, 16); // use only first 128 bit
                System.out.println(key.length);
                System.out.println(new String(key,"UTF-8"));
                secretKey = new SecretKeySpec(key, "AES");
    
    
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    
    
        }
    
        public static String getDecryptedString() {
            return decryptedString;
        }
        public static void setDecryptedString(String decryptedString) {
            AES.decryptedString = decryptedString;
        }
        public static String getEncryptedString() {
            return encryptedString;
        }
        public static void setEncryptedString(String encryptedString) {
            AES.encryptedString = encryptedString;
        }
        public static String encrypt(String strToEncrypt)
        {
            try
            {
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    
    
                setEncryptedString(Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))));
    
            }
            catch (Exception e)
            {
    
                System.out.println("Error while encrypting: "+e.toString());
            }
            return null;
        }
        public static String decrypt(String strToDecrypt)
        {
            try
            {
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
    
                cipher.init(Cipher.DECRYPT_MODE, secretKey);
                setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt))));
    
            }
            catch (Exception e)
            {
    
                System.out.println("Error while decrypting: "+e.toString());
            }
            return null;
        }
    }
    
    注意:请不要将此问题标记为过于宽泛的问题而忽略它,我这样问是因为我需要在下一个项目中使用它之前确定


    提前感谢您宝贵的时间

    不,您绝对不应该使用该代码

    AES类不应包含摘要,这不是AES的一部分。欧洲央行缺乏安全感;即使没有完整性/身份验证,CBC也可能不安全。异常在表下被洗牌,并将导致返回
    null
    。运行时异常和由无效输入和输出生成的异常之间没有区别。字段不正确。正在使用默认编码。事实上,如果我有一张分数表,那么它至少会有一半的分数不及格


    为了能够使用密码学,您至少需要对该主题有最低限度的了解。否则,您需要将其留给专业人士,或者您需要使用由知名专家预先制作的解决方案。仅仅从互联网上获取代码只会给你带来错误的安全感和无法修复的漏洞源。

    Cipher.getInstance(“AES/ECB/PKCS5Padding”)不要使用ECB,使用CBC。还有,你应该这样做。我在3分钟内输入了这个,这意味着我甚至没有仔细看一下代码。比特桶对这段代码来说太好了。我对密码学有很好的理解。但情况是,我需要知道,在我们的生产级项目中使用某个人制作的库而不重新发明轮子是否存在任何漏洞。因为他们好像已经知道我的加密算法是如何工作的。就这样!PHP库默认为ECB模式。我不会向任何人推荐这个图书馆;它无法提供合理的默认值。(PDF)应予以劝阻。如果你需要一个安全的实现:我保证。