首页
社区
课程
招聘
未解决 [悬赏]ECBC椭圆曲线加密找不到加密形式 30.00雪花
发表于: 2017-11-18 22:36 3532

未解决 [悬赏]ECBC椭圆曲线加密找不到加密形式 30.00雪花

2017-11-18 22:36
3532
    ECBC加密,初始化 ECkey的时候,返回
initShareKeyByBouncycastle failed, unknown curve name: secp192k1

我百度了一下 “ secp192k1 ”,是有这个加密形式的,就是找不到支持这种加密形式的包,不知道怎么添加到java的jre里面。


package ecdh;



import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.KeyAgreement;

public class EcdhCrypt
{

 
    private int initShareKeyByBouncycastle()
  {

      Object localObject1 = KeyPairGenerator.getInstance("EC", "BC");
      ((KeyPairGenerator)localObject1).initialize(new ECGenParameterSpec("secp192k1"));
      Object localObject2 = ((KeyPairGenerator)localObject1).genKeyPair();
      localObject1 = ((KeyPair)localObject2).getPublic();
      byte[] arrayOfByte = ((PublicKey)localObject1).getEncoded();
      localObject2 = ((KeyPair)localObject2).getPrivate();
      ((PrivateKey)localObject2).getEncoded();
      PublicKey localPublicKey = constructX509PublicKey("3046301006072A8648CE3D020106052B8104001F03320004928D8850673088B343264E0C6BACB8496D697799F37211DEB25BB73906CB089FEA9639B4E0260498B51A992D50813DA8");
      KeyAgreement localKeyAgreement = KeyAgreement.getInstance("ECDH", "BC");
      localKeyAgreement.init((Key)localObject2);
      localKeyAgreement.doPhase(localPublicKey, true);
  }
}





[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
java">package  cn.xinxi.des;
import  java.security.Key;
import  java.security.Security;
import  javax.crypto.Cipher;
import  javax.crypto.KeyGenerator;
import  javax.crypto.SecretKey;
import  javax.crypto.SecretKeyFactory;
import  javax.crypto.spec.DESKeySpec;
import  org.apache.commons.codec.binary.Hex;
import  org.bouncycastle.jce.provider.BouncyCastleProvider;
public  class  DES  {
       private  static  final  String  str="xinxi";
       public  static  void  main(String[]  args)  throws  Exception  {
               jdkDES();
               bcDES();
       }
       public  static  void  jdkDES()  throws  Exception{
               //生成key
               //KeyGenerator,密钥生成器
               KeyGenerator  keyGenerator  =  KeyGenerator.getInstance("DES");
               keyGenerator.init(56);//指定key  size  这里使用默认值56位
               //声称密钥
               SecretKey  secreKey=  keyGenerator.generateKey();
               byte[]  bytesKey  =  secreKey.getEncoded();
               
               //key转换(恢复密钥)
//                SecretKey  convertSecreKey  =  new  SecretKeySpec(bytesKey,"DES");//与下面三行效果貌似差不多
               DESKeySpec  desKeySpec  =  new  DESKeySpec(bytesKey);
               SecretKeyFactory  factory=SecretKeyFactory.getInstance("DES");
//                System.out.println(keyGenerator.getProvider());
               Key  convertSecreKey  =  factory.generateSecret(desKeySpec);
               
               //加密
               Cipher  cipher  =  Cipher.getInstance("DES/ECB/PKCS5Padding");//加密算法/工作方式/填充方式
               cipher.init(Cipher.ENCRYPT_MODE,convertSecreKey);//模式(此处是加密模式)、key
               byte[]  result  =  cipher.doFinal(str.getBytes());//参数是要被加密的内容
               System.out.println("JDK  DES加密结果:"+Hex.encodeHexString(result));//转成16进制
               
               //解密  生成key和key转换    与加密一样
               cipher.init(Cipher.DECRYPT_MODE,  convertSecreKey);//模式(此处是解密模式)、key
               result=cipher.doFinal(result);
               System.out.println("JDK  DES解密结果:"+new  String(result));
       }
       public  static  void  bcDES()  throws  Exception{
               Security.addProvider(new  BouncyCastleProvider());
               
               //生成key
               KeyGenerator  keyGenerator  =  KeyGenerator.getInstance("DES","BC");
//                System.out.println(keyGenerator.getProvider());
               keyGenerator.init(56);//指定key  size  这里使用默认值56位
               SecretKey  secreKey=  keyGenerator.generateKey();
               byte[]  bytesKey  =  secreKey.getEncoded();
               
               //key转换
               DESKeySpec  desKeySpec  =  new  DESKeySpec(bytesKey);
               SecretKeyFactory  factory=SecretKeyFactory.getInstance("DES");
               Key  convertSecreKey  =  factory.generateSecret(desKeySpec);
               
               //加密
               Cipher  cipher  =  Cipher.getInstance("DES/ECB/PKCS5Padding");//加密算法/工作方式/填充方式
               cipher.init(Cipher.ENCRYPT_MODE,convertSecreKey);//模式(此处是加密模式)、key
               byte[]  result  =  cipher.doFinal(str.getBytes());//参数是要被加密的内容
               System.out.println("BC  DES加密结果:"+Hex.encodeHexString(result));//转成16进制
               
               //解密  生成key和key转换与加密一样
               cipher.init(Cipher.DECRYPT_MODE,  convertSecreKey);//模式(此处是解密模式)、key
               result=cipher.doFinal(result);
               System.out.println("BC  DES解密结果:"+new  String(result));
       }
}
是这样吗?
2017-11-26 06:27
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
3
椭圆曲线加密应该指的是国密算法吧,像是SM2非对称加密算法。
2017-12-3 21:27
0
雪    币: 3577
活跃值: (5300)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
又在干安卓QQ  ,这个你缺少lib,你搜索bcprov就能找到了
2017-12-16 14:18
0
游客
登录 | 注册 方可回帖
返回
//