简介 目录 评价 推荐
  • 慕工程0499250 2021-05-18
    私钥加密,公钥解密,这有什么实际意义?
    1回答·692浏览
  • cryptoliu 2020-11-14
    同态加密有没有建议

    你说的也是可以的

    1回答·630浏览
  • 行望星烁 2018-10-11
    X.509标准的由来

    这个问题可以去查相关的料

    1回答·1411浏览
  • 行望星烁 2018-10-11
    Moocer老师请问下出于什么考虑将密钥长度的范围定为512~1024呢?
    2回答·1192浏览
  • 慕粉5592549 2018-10-11
    java.security.Signature 和 javax.crypto.Cipher
    1回答·1302浏览
  • Brighten_fpJMX3 2018-08-04
    前端加密, 后台解密
    0回答·1723浏览
  • 965223108 2018-06-17
    不是用对方的公钥加密 对方收到信息后再用自己的私钥解密吗

    两种都有

    1. 公钥加密,私钥解密

    2. 私钥加密,公钥解密

    1回答·1745浏览
  • 王二小的宠物狗 2018-05-17
    java.security.NoSuchAlgorithmException: Unsupported secret key algorithm: DES

    由于JDK版本不同,在Java 8 update 161版本以后就会出现此问题,根本原因还是DH密钥长度至少为512位,而DES算法密钥没有这么长,密钥长度不一致引起的。

    解决方法:

    配置JVM的系统变量:-Djdk.crypto.KeyAgreement.legacyKDF=true

    https://img3.mukewang.com/5bbdae8800016f9210920689.jpg

    4回答·6353浏览
  • 慕丝0352314 2018-05-08
    RSA中使用PKCS8与X509?
    1回答·3641浏览
  • 慕粉2333001784 2018-04-07
    我看错了吗?还是我理解有误?
    已采纳 _Alance 的回答

    1.发送方构建公钥私钥。

    2.发送方发布发送方公钥。

    3.接收方接收发送方公钥构建接收方公钥私钥。

    4.接收方发布接收方公钥。

    5.发送方通过发送方的私钥和接收方的公钥构建对称加密秘钥用于加密。

    6.接收方通过接收方的私钥和发送方的公钥构建对称加密秘钥用于解密。

    7.发送方通过秘钥加密数据并发送。

    8.接收方接收数据并通过秘钥解密数据。

    我稍微整理了下

    public static void jdkDHFlow() throws Exception {
        //1.发送方构建公钥私钥
        KeyPair senderKeyPair = jdkSenderPublicKey();
        //2.发送方发布公钥
        byte[] senderPublicKeyEncode = senderKeyPair.getPublic().getEncoded();
        //3.接收方构建公钥私钥->接收方通过发送方公钥构建公钥私钥
        KeyPair receiverKeyPair = jdkreceiverPublicKey(senderPublicKeyEncode);
        //4.接收方发布公钥
        byte[] receiverPublicKeyEncode = receiverKeyPair.getPublic().getEncoded();
        //5.发送方构建对称加密的秘钥->依据接收方公钥和自己的公钥私钥构建
        SecretKey senderDesKey = jdkGetSecretKey(senderKeyPair,receiverPublicKeyEncode);
        //6.接收方构建对称加密秘钥->依据发送方公钥和接收方公钥撕咬构建
        SecretKey receiverDesKey = jdkGetSecretKey(receiverKeyPair,senderPublicKeyEncode);
        //对比双方对称加密秘钥是否安相同 查看是否测试成功
        if(Objects.equals(receiverDesKey,senderDesKey)){
            System.out.println("双方秘钥相同");
        }
        //7.发送方加密
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE,senderDesKey);
        byte[] result = cipher.doFinal(BASE_STRING.getBytes());
        System.out.println("JDK DH 加密:"+ Base64.encodeBase64String(result));
        //8.接收方解密
        cipher.init(Cipher.DECRYPT_MODE,receiverDesKey);
        result = cipher.doFinal(result);
        System.out.println("JDK DH 解密:"+new String(result));
    }
    
    /**
      * 发送方构建发送方公钥
      * @return 构建完成的公钥
      */
     public static KeyPair jdkSenderPublicKey() throws NoSuchAlgorithmException {
         //1.初始化发送方秘钥
         KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");
         senderKeyPairGenerator.initialize(512);
         //生成秘钥
         KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();
         return  senderKeyPair;
     }
    
     /**
      * 依据发送方公钥生成接收方公钥
      * @param senderPublicKey 发送方公钥
      * @return 接收方公钥
      */
     public static KeyPair jdkreceiverPublicKey(byte[] senderPublicKey) throws Exception {
         KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH");
         X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKey);
         PublicKey receiverPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec);
         //使用和发送方一样的参数初始化
         DHParameterSpec dhParameterSpec = ((DHPublicKey) receiverPublicKey).getParams();
         KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH");
         //发送方公钥解析出来的dhParameterSpec
         receiverKeyPairGenerator.initialize(dhParameterSpec);
         KeyPair receiverKeyPair = receiverKeyPairGenerator.generateKeyPair();
         return receiverKeyPair;
     }
    
     /**
      * 自己的公钥私钥与对方的公钥构建 对称秘钥
      * @param keyPair 自己秘钥对
      * @param publicKey 对方公钥
      * @return 本地对称加密秘钥
      */
     public static SecretKey jdkGetSecretKey(KeyPair keyPair,byte[] publicKey) throws Exception {
         KeyFactory keyFactory = KeyFactory.getInstance("DH");
         X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey);
         PublicKey senderPublicKey = keyFactory.generatePublic(x509EncodedKeySpec);
         KeyAgreement keyAgreement = KeyAgreement.getInstance("DH");
         keyAgreement.init(keyPair.getPrivate());
         keyAgreement.doPhase(senderPublicKey,true);
         SecretKey secretKey = keyAgreement.generateSecret("DES");
         return  secretKey;
     }


    2回答·2323浏览
  • 慕桂英0665973 2018-03-21
    对一些敏感信息加密比如身份证之类的,用什么加密方式最好?

    看情况。看业务。

    1回答·5972浏览
  • 一枚加班的程序猿 2018-01-15
    26行代码和33行代码有啥区别?

    感兴趣你可以debug时查看其结构,或者查看一下实现的源码。

    2回答·1381浏览
  • 一枚加班的程序猿 2018-01-14
    发送方本地秘钥指发送方的私钥吗

    发送方的本地密钥:是通过发送方的私钥和接受方的公钥一起生成的

    2回答·1324浏览
  • 开开心心就好 2017-11-06
    加解密…
    2回答·1293浏览
  • 洋妞honey 2017-05-08
    DH加密算法

    问题是什么?

    1回答·1627浏览
  • 河里的蟹 2017-04-09
    RSA字符串秘钥如何使用?

    看看这个或许有帮助.http://www.cnblogs.com/lvk618/p/4726086.html

    2回答·1618浏览
  • 田心枫 2017-03-12
    非对称加密破解容易吗
    已采纳 呀呀呀yayaya 的回答

    不容易破解,除非你公钥泄露

    1回答·2473浏览
  • 哈哈552 2017-03-12
    DH算法安全吗
    已采纳 田心枫 的回答

    非对称,还比较安全吧

    1回答·2547浏览
  • 谷神_ 2017-02-21
    这是什么错误

    public key 不对,是不是用错函数?

    1回答·1296浏览
  • 慕粉3914370 2017-01-08
    请问为什么长度会丢失
    已采纳 dky 的回答

    String str="imooc security";

               Cipher cipher=Cipher.getInstance("DES");

               cipher.init(Cipher.ENCRYPT_MODE, senderSecretKey);

               byte[] bs=cipher.doFinal(str.getBytes());



    1回答·1577浏览
  • 慕粉4284617 2016-10-25
    为什么已经获取了私钥了还要用keyfactory?

    老师的意思的是密钥的转换,实际上并不需要转换,也不需要重新生成keyfactory。可能是实际项目中一般会这样,因为实际接受方和发送方并不知道对方的密钥的encoded format(编码格式),所以需要转换成自己使用encoded format。例如本节里面的X509...之类的。而KeyFactory就是转换格式后重新生成私钥,公钥。

    也可以用下面的代码,不需要转换,理论上是可以的:

    package com.imooc.RSA;
    import org.apache.commons.codec.binary.Hex;
    import javax.crypto.Cipher;
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    /**
     * Created by anyuan on 2016/11/23.
     */
    public class ImoocRSA {
        public static final String src = "imooc security rsa";
        public static void main(String[] args) throws Exception {
            jdkRSA();
        }
        public static void jdkRSA() throws Exception {
            //初始化密钥
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(512);//512~65532
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            //私钥加密,公钥解密
            //下面是产生密钥工厂,用公钥或者私钥产生密钥工厂,进而产生密钥。原则上这里可以省略.密钥转换也可以省略
    //        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    //        PrivateKey privateKey = keyFactory.generatePrivate((KeySpec) keyPair.getPrivate());
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("**私钥加密,公钥解密**");
            System.out.println("加密:" + Hex.encodeHexString(result));
            cipher.init(Cipher.DECRYPT_MODE, keyPair.getPublic());
            result = cipher.doFinal(result);
            System.out.println("解密:" + new String(result));
        }
    }

    代码简洁很多。自己写的时候没必要像老师那么繁琐。但是实际项目中就不一定了。


    1回答·2406浏览
  • 慕粉4196815 2016-10-18
    解密时报如下异常: javax.crypto.IllegalBlockSizeException: Data must not be longer than 245 bytes

    这个是加密的字符串太长了,我也没找到解决方案的,谁有办法请明示

    4回答·8101浏览
  • 小猪开 2016-07-02
    jar包缺少

    百度,下一个。

    1回答·1341浏览
  • jcoder512 2016-01-09
    ElGamal加密算法异常

    使用AES加密时,当密钥大于128时,代码会抛出java.security.InvalidKeyException: Illegal key size or default parameters

    Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib/security

    这种限制是因为美国对软件出口的控制。


    解决办法:

    去掉这种限制需要下载Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.网址如下。

    下载包的readme.txt 有安装说明。就是替换${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar

    jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR

    jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html


    参考http://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters

    错误:java.security.InvalidKeyException: Illegal key size or default parameters解决方法

    发布于 2014 年 3 月 18 日,属于 高性能JAVA  分类,757 浏览数

    Java几乎各种常用加密算法都能找到对应的实现。因为美国的出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。因此存在一些问题:
    ●密钥长度上不能满足需求(如:java.security.InvalidKeyException: Illegal key size or default parameters);
    ●部分算法未能支持,如MD4、SHA-224等算法;
    ●API使用起来还不是很方便;一些常用的进制转换辅助工具未能提供,如Base64编码转换、十六进制编码转换等工具。

        Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),我们只需要将其部署在JRE环境中,就可以解决限制问题。
    下载地址:
          ●Java 5.0 无政策限制文件
          ●Java 6 无政策限制文件
          ●Java 7 无政策限制文件
          ●其他版本 无政策限制文件

          下载的压缩包中仅有一个目录,也就是jce目录。该目录中包含了4个文件:README.txt、COPYRIGHT.html、local_policy.jar和US_export_policy.jar。其中包含的两个jar文件正是此次配置中用到的文件。
          我们可以查看上述README.txt文件,你需要在JDK的JRE环境中,或者是JRE环境中配置上述两个jar文件。
          切换到%JDK_Home%\jre\lib\security目录下,对应覆盖local_policy.jar和US_export_policy.jar两个文件。同时,你可能有必要在%JRE_Home%\lib\security目录下,也需要对应覆盖这两个文件。
          配置权限文件的最终目的是为了使应用在运行环境中获得相应的权限,可以加强应用的安全性。通常,我们在应用服务器上安装的是JRE,而不是JDK。因此,这就很有必要在应用服务器的%JRE_Home%\lib\security目录下,对应覆盖这两个权限文件。很多开发人员往往忽略了这一点,导致事故发生。

    AES加密时抛出java.security.InvalidKeyException: Illegal key size or default parameter

    0条评论

    [摘要:起源:http://blog.csdn.net/shangpusp/article/details/7416603 应用AES减稀时,当稀钥大于128时,代码会扔出java.security.InvalidKeyException: Illegal key size or default parameters Illegal key size or default parameters是指] 

    来源:http://blog.csdn.net/shangpusp/article/details/7416603 

    使用AES加密时,当密钥大于128时,代码会抛出java.security.InvalidKeyException: Illegal key size or default parameters


    Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib/security 

    这种限制是因为美国对软件出口的控制。 

    解决办法: 

    去掉这种限制需要下载Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.网址如下。 

    下载包的readme.txt 有安装说明。就是替换${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar 

    jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR 

    jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

    jdk7下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html


    AES加密参考:http://blog.csdn.net/hbcui1984/article/details/5201247 

    感谢关注 Ithao123加密解密频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!

    java.security.InvalidKeyException: Illegal key size or default parameters

    时间 2014-06-27 11:06:58  CSDN博客

    原文  http://blog.csdn.net/liwf_/article/details/35233009

    主题 Java 网络安全

    做CA认证 生成证书时候出错,后来发现是 秘钥长度太长了,怎么会有这个问题呢,看下面的:

    参考网址 : http://open.eucalyptus.com/forum/illegal-key-size

    http://ksgimi.iteye.com/blog/1584716

    异常:

    EjbcaException_Exception: exception encrypting data - java.security.InvalidKeyException: Illegal key size

    分析:

    Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib/security 

    这种限制是因为美国对软件出口的控制。 

    所以下载匹配的jce_policy ,替换jdk安装目录下 jdk1.* \jre\lib\security 中的 local_policy.jar  和 US_export_policy.jar 两个jar包。(不主要)

    替换jdk安装目录下 jre *  \lib\security 中的 local_policy.jar  和 US_export_policy.jar 两个jar包。 (主要)

    看下文:

    I was working on webservice call where my code was breaking in RAD during decrypting the password of keystore. I encountered below error:


    Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]


    There are key size restrictions with the default crypto files local_policy.jar and US_export_policy.jar comes with JDK – which limits it to 128.   If your security policy using a key size larger than this – then the above exception is thrown.

    For example – if your security policy specifies the algorithmic suite as Basic256 – then the key size to be used is 256.

    For the solution of above issue, you need to patch your JDK with Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.

    For JDK1.5  visit , download the crypto files and copy the two jar files from the extracted jce directory (local_policy.jar and US_export_policy.jar) to $JAVA_HOME/jre/lib/security.

    For JDK1.6  visit

    If your IDE using it’s own specific JDK then patch that as well with these files to resolve the issue.


    4回答·2726浏览
  • 窗明几净1 2015-10-29
    怎么Objects.equals方法我没有

    高版本的http://img3.mukewang.com/5a0afeda00017b6608560460.jpg

    6回答·3165浏览
  • UFO2015 2015-10-19
    为什么我的运行结果完全不同?

    智商捉急

    1回答·1608浏览
  • 快乐学习java 2015-10-18
    每次生成的SRA密钥一样吗?

    不一样


    1回答·1613浏览
  • 风满西楼 2015-09-24
    为何我一样的代码,解密出来就是空的,谁能告诉我?

    我的锅,他妈的

    public static String input = "";

    输入为空串,调了一个小时,电脑都快砸烂,这要把手剁了

    1回答·2130浏览
  • NeverGiveUp7 2015-08-27
    讲解的看不懂
    3回答·1226浏览
  • 用户1118494 2015-08-24
    java.security.Signature与javax.crypto.Cipher区别
    3回答·3341浏览
数据加载中...
开始学习 免费