据我所知,RSA密钥通常是基于(强)随机生成器生成的.
相反,我想基于密码创建它们.
或者更确切地说是它的哈希值,例如sha512(sha512(密码+盐)+密码+辣椒)
这需要在JavaScript中完成客户端.
谁会知道怎么做?是否有一个简单的JavaScript库,可以根据给定的输入确定性地创建RSA密钥对?
(实际上,我提到了RSA,但任何安全的非对称加密就足够了,我只需要公私加密)
另外:我需要这个,因为我正在构建一些安全的通信解决方案,不需要依赖连接甚至服务器来保证安全.
我正在使用随机密钥使用AES加密所有内容,并且密钥是RSA加密的.这个想法是Alice可以使用Bob的公钥对其内容(或实际上是她的内容的AES密钥)进行RSA加密(因此Bob的公钥必须在线存储).
之后,当Bob再次输入密码时,他的浏览器可以在现场确定性地计算他的RSA私钥和公钥,从Alice下载内容,并使用他的私钥在本地解密.
这个问题适用于那些有软件保护部分密钥验证技术经验的人.我试图了解PKV如何比其他keygen方案更好,并且在阅读了大量参考文献之后
http://47hats.com/2007/07/26/implementing-a-partial-serial-number-verification-system/
我有一些问题.
基本上,如果我理解正确,PKV背后的想法是不是在客户端检查整个密钥,以便如果有人(即黑客)提出了密钥,你只需要用不同的检查重新编译软件.关键,瞧,假keygen将不再有效.
但我不明白的是,如果在某个时刻有一个keygen,它显然能够解锁至少一个版本的软件,仍然可以在网上找到.所以基本上,你根本就没有避免使用虚假密钥,你只有一个版本的软件可以使用假的keygen而另一个版本没有.
那么它如何优于其他keygen保护技术呢?
我正在创建一个为用户生成密钥对的应用程序.但在每个设备中,密钥都是相同的.这是我的代码:
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设备,密钥生成仅被调用一次,因此每个设备中的密钥应该是不同的.有人能告诉我我在这里缺少什么吗?
我正在尝试为我的应用程序实现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
我有一些 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) 这是我第一次使用 tkinter 制作完整的 python 应用程序并想要分发它。我一直在网上搜索,但我不太清楚如何为我的应用程序制作许可证密钥,因为我想要一个唯一的密钥,我给某些人允许他们运行该应用程序,而且我也希望能够停用该密钥并创建新密钥。请注意,这是一个适用于 Windows 计算机的应用程序,提前感谢您的帮助。
我在微控制器上创建了一个程序(它没有运行任何操作系统),我在C中找不到任何可以给我一个RSA(PKCS#1)密钥生成器(公共和私有)的库.
我认为OpenSSH不是一个选项,因为它是Linux或Unix的链接.我发现了一些SSH实现,但它只支持客户端(通过公钥编码).
是否存在这样的C lib(RSA(PKCS#1)密钥生成器(公共和私有)+编码,解码)?
我很困惑为什么在生成加密密钥时需要指定一个算法,如"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)
...表示要使用的密码算法是必要的.我只是没有得到为密钥生成指定它的目的.
谢谢.
不推荐使用以下方法
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) 我正在尝试加密和解密密码,并且这些生成密钥到目前为止都很好.现在我需要将此密钥存储在属性文件中,但是当我添加密钥时,它看起来像这样:
#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) key-generator ×10
java ×5
cryptography ×4
rsa ×4
android ×3
encryption ×3
aes ×1
c ×1
javascript ×1
key-pair ×1
license-key ×1
licensing ×1
openssl ×1
private-key ×1
python ×1
security ×1
tkinter ×1