【问题标题】:how to import java.security.* in my gwt application如何在我的 gwt 应用程序中导入 java.security.*
【发布时间】:2012-11-20 13:17:14
【问题描述】:

我想用 gwt 开发一个插件。它必须使用 java.security.* 在客户端生成密钥。 我已经提出了所有要求 但它显示以下错误。

加载模块

coreservlets.GwtApp1

Loading inherited module 'coreservlets.GwtApp1'
    Loading inherited module 'java.security.KeyPair'
       [ERROR] Unable to find 'java/security/KeyPair.gwt.xml' on your classpath; >could be a typo, or maybe you forgot to include a classpath entry for source?
    [ERROR] Line 15: Unexpected exception while processing element 'inherits'

我在我的 gwtapp1.gwt.xml 文件中继承了所有相关的类,如“java.security.KeyPair”

我也将 jar 包含在类路径本身中。但错误仍然没有消失。 我该怎么办.plz建议 这是我的java代码

package coreservlets.client;

import java.io.UnsupportedEncodingException;
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.SecureRandom;


public class Keygen {

private PrivateKey privKey;
private PublicKey pubKey;
private static Keygen keygen = null;

private Keygen() {

}

public static Keygen getInstance() {

    if (keygen == null) {
        keygen = new Keygen();
    }

    return keygen;
}

public void KeyGenerator(String ALGORITHAM) {
    KeyPairGenerator keyGen = null;
    SecureRandom random = null;
    try {
        keyGen = KeyPairGenerator.getInstance(ALGORITHAM);
    } catch (NoSuchAlgorithmException ex) {
        ex.printStackTrace();
    }
    try {
        random = SecureRandom.getInstance("SHA1PRNG", "SUN");
        //random = SecureRandom.getInstance("SHA1PRNG");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();

    } catch (NoSuchProviderException ex) {
        ex.printStackTrace();
    }

    //keyGen.initialize(1024, random);
    keyGen.initialize(1024);
    KeyPair key = keyGen.generateKeyPair();
    privKey = key.getPrivate();
    pubKey = key.getPublic();

}

public String getPubKeyasString() {
    //return Base64.encodeBase64String(pubKey.getEncoded());
    try {
        return new String(pubKey.getEncoded(),"ISO-8859-1");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
public String getPriKeyasString() {
    //return Base64.encodeBase64String(privKey.getEncoded());
    try {
        return new String(privKey.getEncoded(),"ISO-8859-1");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

}

【问题讨论】:

  • 您的“KeyPair.gwt.xml”似乎有问题。检查一切是否正确或将其粘贴到此处。

标签: java gwt jar rsa browser-plugin


【解决方案1】:

对于密钥生成,您可以使用 gwt-crypto 库,但要为某些性能问题和不受支持的功能做好准备。

[编辑] 前段时间,我成功地使用 jsni 封装了一个纯 js rsa 解决方案。我拿的js是jsbn.js

【讨论】:

  • 感谢您的建议,但我不必使用 gwt-chrypto lib。您是否有任何其他可能的方法来解决它。
  • 不幸的是,gwt-jre 中没有模拟 java.security,因此尽管您创建了一个包含原始 java 文件(来自 sun/oracle)的模块,但您将无法使用这些类。我已经编辑了我的回复以包含一个 jsni 可能的解决方案。
  • 这也是我的选择。总的来说,我必须开发浏览器插件,安装时将在客户端生成密钥,公钥将发送到服务器,服务器将加密该文件和该加密文件将由我在客户端的私钥解密。我正在做的一种可能的方法是使用 gwt 生成密钥,因为上面的问题正在发生。所以我需要建议我应该做什么,还有他们的任何其他方式生成应该在服务器端算法上工作的公钥,因为它不能通过使用 js 生成密钥来工作。我是 gwt 的新手。再次感谢您的回复。
  • 使用 jsbn 生成的密钥应该使用 openssl 在服务器端工作,所以我猜你可以在服务器中使用 javax.security,因为它与 openssl 兼容。在包装 jsbn 之前,您可以使用他们网站 (www-cs-students.stanford.edu/~tjw/jsbn/rsa.html) 中的演示页面来生成密钥和消息,并尝试使用您的服务器 java 实现进行解密/加密。一旦你有了这个工作,你就可以在客户端工作,包装你需要的 js 方法
  • @ManoloCarrascoMoñino 你能帮我解决这个相关的问题吗? stackoverflow.com/questions/25777287/…
【解决方案2】:

.gwt.xml 文件中,<inherits ...> 引用另一个.gwt.xml 文件。我怀疑你是像 java import ... 一样使用它?

如果您想在 GWT 中使用 java.security.KeyPair 客户端,您应该做的是确定 GWT 编译器可以使用源代码。这是使用.gwt.xml 文件中的<source path="..." /> 条目完成的。

您可能想访问GWT JRE Emulation Reference 页面,遗憾的是您会看到不支持任何javax.* 包,所以祝您的项目好运...也许您应该使用KeyPair 保留代码仅服务器端?

希望对您有所帮助。

【讨论】:

  • 感谢您的帮助,实际上我是 gwt 的新手。我见过各种开发 gwt 应用程序的示例,例如 this example,但无法获得如何使用 java.security.* jar。请问详细解释一下。再次感谢
  • GWT 编译器需要客户端中每个类的源代码。您可以从 JDK 中的 src.zip 中提取 KeyPair(以及相关/引用的类!)并使其工作。
猜你喜欢
  • 2011-04-27
  • 2011-09-12
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多