标签: key-generator

基于密码在javascript中生成RSA密钥对

据我所知,RSA密钥通常是基于(强)随机生成器生成的.

相反,我想基于密码创建它们.

或者更确切地说是它的哈希值,例如sha512(sha512(密码+盐)+密码+辣椒)

这需要在JavaScript中完成客户端.

谁会知道怎么做?是否有一个简单的JavaScript库,可以根据给定的输入确定性地创建RSA密钥对?

(实际上,我提到了RSA,但任何安全的非对称加密就足够了,我只需要公私加密)


另外:我需要这个,因为我正在构建一些安全的通信解决方案,不需要依赖连接甚至服务器来保证安全.

我正在使用随机密钥使用AES加密所有内容,并且密钥是RSA加密的.这个想法是Alice可以使用Bob的公钥对其内容(或实际上是她的内容的AES密钥)进行RSA加密(因此Bob的公钥必须在线存储).

之后,当Bob再次输入密码时,他的浏览器可以在现场确定性地计算他的RSA私钥和公钥,从Alice下载内容,并使用他的私钥在本地解密.

javascript security cryptography rsa key-generator

12
推荐指数
3
解决办法
2万
查看次数

部分密钥验证

这个问题适用于那些有软件保护部分密钥验证技术经验的人.我试图了解PKV如何比其他keygen方案更好,并且在阅读了大量参考文献之后

http://47hats.com/2007/07/26/implementing-a-partial-serial-number-verification-system/

我有一些问题.

基本上,如果我理解正确,PKV背后的想法是不是在客户端检查整个密钥,以便如果有人(即黑客)提出了密钥,你只需要用不同的检查重新编译软件.关键,瞧,假keygen将不再有效.

但我不明白的是,如果在某个时刻有一个keygen,它显然能够解锁至少一个版本的软件,仍然可以在网上找到.所以基本上,你根本就没有避免使用虚假密钥,你只有一个版本的软件可以使用假的keygen而另一个版本没有.

那么它如何优于其他keygen保护技术呢?

encryption licensing cryptography key-generator

9
推荐指数
1
解决办法
2911
查看次数

Android KeyPairGenerator始终生成相同的密钥对

我正在创建一个为用户生成密钥对的应用程序.但在每个设备中,密钥都是相同的.这是我的代码:

public KeyPair generateKeys() {
    KeyPair keyPair = null;
    try {
        // get instance of rsa cipher
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(1024);            // initialize key generator
        keyPair = keyGen.generateKeyPair(); // generate pair of keys
    } catch(GeneralSecurityException e) {
        System.out.println(e); 
    }
    return keyPair;
}
Run Code Online (Sandbox Code Playgroud)

并显示生成的密钥代码是:

KeyPair keyPair = rsa.generateKeys();

byte[] publicKey = keyPair.getPublic().getEncoded();
byte[] privateKey = keyPair.getPrivate().getEncoded();
privateText.setText( Base64.encodeToString(privateKey, Base64.NO_WRAP) );
publicText.setText( Base64.encodeToString(publicKey, Base64.NO_WRAP) );
Run Code Online (Sandbox Code Playgroud)

对于每个Android设备,密钥生成仅被调用一次,因此每个设备中的密钥应该是不同的.有人能告诉我我在这里缺少什么吗?

java android key-generator key-pair

7
推荐指数
1
解决办法
4776
查看次数

如何在Android中使用KeyGenerator为FingerPrint API生成密钥

我正在尝试为我的应用程序实现FingerPrint API.为此,我正在关注Google的指纹对话框示例.

它工作正常compileSdkVersion=23,minSdkVersion=23 但我的应用程序compileSdkVersion是21并且minSdkVersion是14.为此目的,我使用FingerprintManagerCompat而不是FingerprintManager工作正常,但问题是密钥生成.

android.security.keystore.KeyGenParameterSpec;
android.security.keystore.KeyPermanentlyInvalidatedException;
android.security.keystore.KeyProperties;
Run Code Online (Sandbox Code Playgroud)

密钥库包及其类不可用于生成密钥,所有支持的密钥生成算法都有18个以上的API版本,任何人都可以指导我如何生成密钥以支持更低版本,请?

android audio-fingerprinting key-generator android-6.0-marshmallow

7
推荐指数
1
解决办法
856
查看次数

为什么 KeyPairGenerator.genKeyPair() 这么慢

我有一些 Java 代码,当我运行函数时,KeyPairGenerator.genKayPair()它可以工作 40 秒或更长时间。如何改变这种状况?如果我跑

openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout server.key -out cert.pem 
Run Code Online (Sandbox Code Playgroud)

它的工作 3 秒。慢代码:

KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = new SecureRandom();
gen.initialize(4096, random);        
keyPair = gen.generateKeyPair();        
PublicKey pubk = keyPair.getPublic();
PrivateKey prvk = keyPair.getPrivate();
Run Code Online (Sandbox Code Playgroud)

java openssl cryptography rsa key-generator

6
推荐指数
1
解决办法
3445
查看次数

为我的 python 应用程序生成许可证密钥

这是我第一次使用 tkinter 制作完整的 python 应用程序并想要分发它。我一直在网上搜索,但我不太清楚如何为我的应用程序制作许可证密钥,因为我想要一个唯一的密钥,我给某些人允许他们运行该应用程序,而且我也希望能够停用该密钥并创建新密钥。请注意,这是一个适用于 Windows 计算机的应用程序,提前感谢您的帮助。

python tkinter license-key key-generator

6
推荐指数
1
解决办法
2万
查看次数

C RSA密钥生成器

我在微控制器上创建了一个程序(它没有运行任何操作系统),我在C中找不到任何可以给我一个RSA(PKCS#1)密钥生成器(公共和私有)的库.

我认为OpenSSH不是一个选项,因为它是Linux或Unix的链接.我发现了一些SSH实现,但它只支持客户端(通过公钥编码).

是否存在这样的C lib(RSA(PKCS#1)密钥生成器(公共和私有)+编码,解码)?

c microcontroller rsa key-generator private-key

5
推荐指数
1
解决办法
4022
查看次数

将"AES"指定为KeyGenerator.getInstance()中的算法究竟做了什么?

我很困惑为什么在生成加密密钥时需要指定一个算法,如"AES" ,例如..

KeyGenerator kg = KeyGenerator.getInstance("AES");
Run Code Online (Sandbox Code Playgroud)

它显然不用于指定密钥的大小,因为AES密钥可以是128,192或256位.那部分将通过init()来完成......

kg.init(256, new SecureRandom());
SecretKey key = kg.generateKey();
Run Code Online (Sandbox Code Playgroud)

对于它的价值,上面的示例代码来自http://android-developers.blogspot.de/2013/02/using-cryptography-to-store-credentials.html

此外,NIST FIPS-197声明......

没有为AES算法识别弱密钥或半弱密钥,并且对密钥选择没有限制.

...这样会让我相信任何 128,192或256位都可以用作密钥.

显然,当我获得密码实例时指定"AES",例如..

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
Run Code Online (Sandbox Code Playgroud)

...表示要使用的密码算法是必要的.我只是没有得到为密钥生成指定它的目的.

谢谢.

java encryption cryptography aes key-generator

5
推荐指数
1
解决办法
3174
查看次数

使用KeyGenParameterSpec.Builder等效替换KeyPairGeneratorSpec - 密钥库操作失败

不推荐使用以下方法

KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");

KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(this)
                            .setAlias(alias)
                            .setSubject(new X500Principal("CN=Sample Name, O=Android Authority"))
                            .setSerialNumber(BigInteger.ONE)
                            .setStartDate(start.getTime())
                            .setEndDate(end.getTime())
                            .build();

generator.initialize(spec);
Run Code Online (Sandbox Code Playgroud)

我遇到的替代品看起来像这样

KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");

generator.initialize(new KeyGenParameterSpec.Builder
                            (alias, KeyProperties.PURPOSE_SIGN)
                            .setDigests(KeyProperties.DIGEST_SHA256)
                            .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
                            .build());
Run Code Online (Sandbox Code Playgroud)

虽然我能够使用它来生成密钥对条目并加密该值,但我无法解密它

 public void encryptString(String alias) {
        try {
            KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry(alias, null);
            RSAPublicKey publicKey = (RSAPublicKey) privateKeyEntry.getCertificate().getPublicKey();

            String initialText = startText.getText().toString();
            if(initialText.isEmpty()) {
                Toast.makeText(this, "Enter text in the 'Initial Text' widget", Toast.LENGTH_LONG).show();
                return;
            }

            //Security.getProviders();

            Cipher inCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "AndroidKeyStoreBCWorkaround");
            inCipher.init(Cipher.ENCRYPT_MODE, publicKey);

            ByteArrayOutputStream outputStream …
Run Code Online (Sandbox Code Playgroud)

java encryption android rsa key-generator

5
推荐指数
2
解决办法
6231
查看次数

如何将GeneratedKey添加到config.properties文件?

我正在尝试加密和解密密码,并且这些生成密钥到目前为止都很好.现在我需要将此密钥存储在属性文件中,但是当我添加密钥时,它看起来像这样:

#Tue Nov 01 08:22:52 EET 2016
KEY=\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000
Run Code Online (Sandbox Code Playgroud)

所以我怀疑我的代码可能有问题?!?!

并且我的代码中有一部分=

private byte[] key = new byte[16];

public void addProperties(String x, String z) {
    Properties properties = new Properties();
    String propertiesFileName = "config.properties";
    try {
        OutputStream out = new FileOutputStream(propertiesFileName);
        properties.setProperty(x, z);
        properties.store(out, null);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void generateKey() {
    KeyGenerator keygen;
    SecretKey secretKey;
    byte[] keybyte = new byte[64];
    try {
        keygen = KeyGenerator.getInstance("AES");
        keygen.init(128);
        secretKey = keygen.generateKey();
        keybyte = secretKey.getEncoded();
        key = keybyte;

 //THIS …
Run Code Online (Sandbox Code Playgroud)

java properties-file key-generator

5
推荐指数
1
解决办法
660
查看次数