有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql java。安全spec.InvalidKeySpecException:java。安全InvalidKeyException:IOException:algid分析错误,不是序列

我在spring微服务体系结构中的java服务类中实现了以下代码:

@Autowired
private UsuarioRepository usuarioRepository;

public String prueba(String data) {
    
    generateKeys(data); 
    
    byte[] text=encryptPrivate("texto de prueba lala",data);
    String texto=decryptPublic(text,data);
    
    return texto;
}

public String generateKeys(String username) {

    KeyPairGenerator keyPairGenerator = null;
    try {
        keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    keyPairGenerator.initialize(512); // múltiplo de 64, 512 ~ 65536

    KeyPair keyPair = keyPairGenerator.generateKeyPair();

    RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
    System.out.println("Private: " + rsaPrivateKey);

    RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
    System.out.println("Public: " + rsaPublicKey);
    
    byte[] publicKeyBytes = keyPair.getPublic().getEncoded();
    byte[] privateKeyBytes = keyPair.getPrivate().getEncoded();
    System.out.println("Encoded: " + publicKeyBytes);
    
    usuarioRepository.add(publicKeyBytes, privateKeyBytes, username);

    return "ok";
}

public byte[] encryptPrivate(String data, String username) {
    
    //sacar clave de BBDD
    byte[] keyBytes = getPrKey(username); //new byte[(int)f.length()]; 
    EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
   
    try {
         KeyFactory kf = KeyFactory.getInstance("RSA"); 
         RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) kf.generatePrivate(spec);
         Cipher cipher = Cipher.getInstance("RSA");
         cipher.init(Cipher.ENCRYPT_MODE, rsaPrivateKey);
         byte[] cipherText = cipher.doFinal(data.getBytes());
         
         return cipherText;
         
    } catch (InvalidKeySpecException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (BadPaddingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    
    return null;
}

public String decryptPublic(byte[] data, String username) {

    byte[] keyBytes = getPuKey(username); //new byte[(int)f.length()]; 
    X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
    try {
         KeyFactory kf = KeyFactory.getInstance("RSA"); 
         RSAPublicKey rsaPublicKey = (RSAPublicKey) kf.generatePublic(spec);
         Cipher cipher = Cipher.getInstance("RSA");
         cipher.init(Cipher.DECRYPT_MODE, rsaPublicKey); 
         byte[] plainText = cipher.doFinal(data);
         //new String(plainText);
         return new String(plainText);
         
    } catch (InvalidKeySpecException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (BadPaddingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return "fail";      
            
}

当我尝试从DDBB恢复私钥时,问题出现了:

 RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) kf.generatePrivate(spec);

我将密钥存储在一个二进制文件中。我得到了以下错误:

爪哇。安全spec.InvalidKeySpecException:java。安全InvalidKeyException:IOException:DerValue。getBigIntegerInternal,不应为48 在爪哇。基地/太阳。安全rsa。这是一家工厂。engineGeneratePrivate(RSAKeyFactory.java:252) 在爪哇。base/java。安全钥匙工厂。generatePrivate(KeyFactory.java:390) 在com。国际会计准则委员会。钱包服务WalletServiceImpl。encryptPrivate(WalletServiceImpl.java:134) 在com。国际会计准则委员会。钱包服务WalletServiceImpl。prueba(WalletServiceImpl.java:50) 在com。国际会计准则委员会。钱包控制器。钱包控制器。encrypt1(WalletController.java:43) 在爪哇。base/jdk。内部的反映NativeMethodAccessorImpl。invoke0(本机方法) 在爪哇。base/jdk。内部的反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:78) 在爪哇。base/jdk。内部的反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在爪哇。base/java。朗。反思。方法调用(Method.java:567) 在org。springframework。网状物方法支持InvocableHandlerMethod。doInvoke(InvocableHandlerMethod.java:205) 在org。springframework。网状物方法支持InvocableHandlerMethod。invokeForRequest(InvocableHandlerMethod.java:150) 在org。springframework。网状物servlet。mvc。方法注释。ServletinInvocableHandler方法。invokeAndHandle(ServletinInvocableHandlerMethod.java:117) 在org。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) 在org。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。handleInternal(RequestMappingHandlerAdapter.java:808) 在org。springframework。网状物servlet。mvc。方法AbstractHandlerMethodAdapter。句柄(AbstractHandlerMethodAdapter.java:87) 在org。springframework。网状物servlet。调度员服务。doDispatch(DispatcherServlet.java:1067) 在org。springframework。网状物servlet。调度员服务。doService(DispatcherServlet.java:963) 在org。springframework。网状物servlet。FrameworkServlet。processRequest(FrameworkServlet.java:1006) 在org。springframework。网状物servlet。FrameworkServlet。doPost(FrameworkServlet.java:909) 在javax。servlet。http。HttpServlet。服务(HttpServlet.java:681) 在org。springframework。网状物servlet。FrameworkServlet。服务(FrameworkServlet.java:883) 在javax。servlet。http。HttpServlet。服务(HttpServlet.java:764) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:227) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。阿帕奇。公猫websocket。服务器WsFilter。doFilter(WsFilter.java:53) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。springframework。网状物滤器RequestContextFilter。doFilterInternal(RequestContextFilter.java:100) 在org。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:119) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。springframework。网状物滤器FormContentFilter。doFilterInternal(FormContentFilter.java:93) 在org。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:119) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。springframework。网状物滤器字符编码过滤器。doFilterInternal(CharacterEncodingFilter.java:201) 在org。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:119) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。阿帕奇。卡塔琳娜。果心标准包装阀。调用(StandardWrapperValve.java:197) 在org。阿帕奇。卡塔琳娜。果心标准连接阀。调用(StandardContextValve.java:97) 在org。阿帕奇。卡塔琳娜。验证者。AuthenticatorBase。调用(AuthenticatorBase.java:540) 在org。阿帕奇。卡塔琳娜。果心标准阀门。调用(StandardHostValve.java:135) 在org。阿帕奇。卡塔琳娜。阀门。错误报告阀。调用(ErrorReportValve.java:92) 在org。阿帕奇。卡塔琳娜。果心标准引擎版本。调用(StandardEngineValve.java:78) 在org。阿帕奇。卡塔琳娜。连接器。郊狼适应者。服务(CoyoteAdapter.java:357) 在org。阿帕奇。郊狼。http11。http11处理器。服务(Http11Processor.java:382) 在org。阿帕奇。郊狼。抽象光。进程(AbstractProcessorLight.java:65) 在org。阿帕奇。郊狼。AbstractProtocol$ConnectionHandler。进程(AbstractProtocol.java:895) 在org。阿帕奇。公猫util。网NioEndpoint$SocketProcessor。doRun(NioEndpoint.java:1722) 在org。阿帕奇。公猫util。网SocketProcessorBase。运行(SocketProcessorBase.java:49) 在org。阿帕奇。公猫util。线程。线程池执行器。runWorker(ThreadPoolExecutor.java:1191) 在org。阿帕奇。公猫util。线程。线程池执行器$Worker。运行(ThreadPoolExecutor.java:659) 在org。阿帕奇。公猫util。线程。TaskThread$WrappingRunnable。运行(TaskThread.java:61) 在爪哇。base/java。朗。丝线。运行(Thread.java:831) 原因:java。安全InvalidKeyException:IOException:DerValue。getBigIntegerInternal,不应为48 在爪哇。基地/太阳。安全pkcs。PKCS8Key。解码(PKCS8Key.java:133) 在爪哇。基地/太阳。安全pkcs。PKCS8Key。(PKCS8Key.java:94) 在爪哇。基地/太阳。安全rsa。RSAPrivateCrtKeyImpl。(rsaprovatecrtkeyimpl.java:152) 在爪哇。基地/太阳。安全rsa。RSAPrivateCrtKeyImpl。newKey(rsaprovatecrtkeyimpl.java:89) 在爪哇。基地/太阳。安全rsa。这是一家工厂。generatePrivate(RSAKeyFactory.java:343) 在爪哇。基地/太阳。安全rsa。这是一家工厂。engineGeneratePrivate(RSAKeyFactory.java:248) ... 54多 JAVA安全spec.InvalidKeySpecException:java。安全InvalidKeyException:IOException:algid分析错误,不是序列 在爪哇。基地/太阳。安全rsa。这是一家工厂。engineGeneratePublic(RSAKeyFactory.java:240) 在爪哇。base/java。安全钥匙工厂。generatePublic(KeyFactory.java:352) 在com。国际会计准则委员会。钱包服务WalletServiceImpl。decryptPublic(WalletServiceImpl.java:209) 在com。国际会计准则委员会。钱包服务WalletServiceImpl。prueba(WalletServiceImpl.java:51) 在com。国际会计准则委员会。钱包控制器。钱包控制器。encrypt1(WalletController.java:43) 在爪哇。base/jdk。内部的反映NativeMethodAccessorImpl。invoke0(本机方法) 在爪哇。base/jdk。内部的反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:78) 在爪哇。base/jdk。内部的反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在爪哇。base/java。朗。反思。方法调用(Method.java:567) 在org。springframework。网状物方法支持InvocableHandlerMethod。doInvoke(InvocableHandlerMethod.java:205) 在org。springframework。网状物方法支持InvocableHandlerMethod。invokeForRequest(InvocableHandlerMethod.java:150) 在org。springframework。网状物servlet。mvc。方法注释。ServletinInvocableHandler方法。invokeAndHandle(ServletinInvocableHandlerMethod.java:117) 在org。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) 在org。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。handleInternal(RequestMappingHandlerAdapter.java:808) 在org。springframework。网状物servlet。mvc。方法AbstractHandlerMethodAdapter。句柄(AbstractHandlerMethodAdapter.java:87) 在org。springframework。网状物servlet。调度员服务。doDispatch(DispatcherServlet.java:1067) 在org。springframework。网状物servlet。调度员服务。doService(DispatcherServlet.java:963) 在org。springframework。网状物服务允许FrameworkServlet。processRequest(FrameworkServlet.java:1006) 在org。springframework。网状物servlet。FrameworkServlet。doPost(FrameworkServlet.java:909) 在javax。servlet。http。HttpServlet。服务(HttpServlet.java:681) 在org。springframework。网状物servlet。FrameworkServlet。服务(FrameworkServlet.java:883) 在javax。servlet。http。HttpServlet。服务(HttpServlet.java:764) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:227) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。阿帕奇。公猫websocket。服务器WsFilter。doFilter(WsFilter.java:53) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。springframework。网状物滤器RequestContextFilter。doFilterInternal(RequestContextFilter.java:100) 在org。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:119) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。springframework。网状物滤器FormContentFilter。doFilterInternal(FormContentFilter.java:93) 在org。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:119) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。springframework。网状物滤器字符编码过滤器。doFilterInternal(CharacterEncodingFilter.java:201) 在org。springframework。网状物滤器OncePerRequestFilter。doFilter(OncePerRequestFilter.java:119) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:189) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:162) 在org。阿帕奇。卡塔琳娜。果心标准包装阀。调用(StandardWrapperValve.java:197) 在org。阿帕奇。卡塔琳娜。果心标准连接阀。调用(StandardContextValve.java:97) 在org。阿帕奇。卡塔琳娜。验证者。AuthenticatorBase。调用(AuthenticatorBase.java:540) 在org。阿帕奇。卡塔琳娜。果心标准阀门。调用(StandardHostValve.java:135) 在org。阿帕奇。卡塔琳娜。阀门。错误报告阀。调用(ErrorReportValve.java:92) 在org。阿帕奇。卡塔琳娜。果心标准引擎版本。调用(StandardEngineValve.java:78) 在org。阿帕奇。卡塔琳娜。连接器。郊狼适应者。服务(CoyoteAdapter.java:357) 在org。阿帕奇。郊狼。http11。http11处理器。服务(Http11Processor.java:382) 在org。阿帕奇。郊狼。抽象光。进程(AbstractProcessorLight.java:65) 在org。阿帕奇。郊狼。AbstractProtocol$ConnectionHandler。进程(AbstractProtocol.java:895) 在org。阿帕奇。公猫util。网NioEndpoint$SocketProcessor。doRun(NioEndpoint.java:1722) 在org。阿帕奇。公猫util。网SocketProcessorBase。运行(SocketProcessorBase.java:49) 在org。阿帕奇。公猫util。线程。线程池执行器。runWorker(ThreadPoolExecutor.java:1191) 在org。阿帕奇。公猫util。线程。线程池执行器$Worker。运行(ThreadPoolExecutor.java:659) 在org。阿帕奇。公猫util。线程。TaskThread$WrappingRunnable。运行(TaskThread.java:61) 在爪哇。base/java。朗。丝线。运行(Thread.java:831) 原因:java。安全InvalidKeyException:IOException:algid分析错误,不是序列 在爪哇。基地/太阳。安全x509。X509钥匙。解码(X509Key.java:397) 在爪哇。基地/太阳。安全x509。X509钥匙。解码(X509Key.java:402)


共 (0) 个答案