深入研究java加密和散列世界,我看到了PBEKeySpec类的构造函数的示例,其中包含各种值iterationCount和keyLength参数.似乎没有什么能解释这些参数的影响或意义.
我假设keyLength密钥是多长时间,因此密钥长度的32位加密值为32,但这种假设感觉不对.我的猜测iterationCount是每个字符加密的次数,也不再感受到对这个假设的喜爱.
欢迎链接到信息或解释.
我从http://www.h2database.com/html/download.html下载了H2控制台
,我已将jdbc.properties文件中的URL配置
为jdbc:h2:c:/data/Messaging.
我在文件中使用相同的URL连接到数据库,但我看不到表; 我只能看到信息模式,当我尝试使用select * from tables它时,我也看不到这些表格.
有谁知道什么可能是错的?
我需要在C#中加密数据,以便将其传递给Java.Java代码属于第三方但我得到了相关的来源,所以我决定,当Java使用Bouncy Castle库时,我将使用C#端口.
解密工作正常.但是,只有当我使用私钥加密而不使用公钥时,解密才有效.使用公钥时,解密失败unknown block type.
显然加密时内部加密RsaEncryptWithPrivate使用公钥,所以我不明白为什么这两种加密方法在功能上不相同:
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.OpenSsl;
public class EncryptionClass
{
public string RsaEncryptWithPublic(string clearText
, string publicKey)
{
var bytesToEncrypt = Encoding.UTF8.GetBytes(clearText);
var encryptEngine = new Pkcs1Encoding(new RsaEngine());
using (var txtreader = new StringReader(publicKey))
{
var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();
encryptEngine.Init(true, keyParameter);
}
var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
return encrypted;
}
public string RsaEncryptWithPrivate(string clearText
, string privateKey)
{
var bytesToEncrypt = Encoding.UTF8.GetBytes(clearText);
var encryptEngine = new …Run Code Online (Sandbox Code Playgroud) 所以Java有一个名为的模式RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING.那有什么意思?
RFC3447,公钥加密标准(PKCS)#1:RSA加密规范版本2.1,第7.1.2节解密操作说Hash和MGF都是RSAES-OAEP-DECRYPT的选项.MGF是它自己的功能,在B.2.1节MGF1中定义,并且它也有自己的Hash"选项".
也许RSAES-OAEP-DECRYPT和MGF1中的Hash"选项"应该是相同的,或者它们可能不是,我不清楚.如果它们是那么我RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING想当你有这意味着sha256应该用于两者.但是如果它们不应该是相同的那么你可以将sha256用于RSAES-OAEP-DECRYPT,例如,sha1用于MGF1.如果是这种情况那么sha256应该用于什么功能呢?什么哈希算法应该用于其他功能?
欧洲央行在这方面的意义是什么?ECB是对称分组密码模式.电子密码本.也许它应该是指Java如何处理比模数更大的明文?就像将明文拆分成与模数一样大的块,然后用RSA加密每个块并将它们连接在一起?我只是猜猜..
我需要在Java中创建一个带有Bouncy Castle的自签名X509证书,但我尝试包含的每个类都已弃用.我怎么解决这个问题?还有其他课程要包含吗?谢谢
我试图在模拟器中运行我的应用程序,并一直收到以下错误:
安装失败,因为APK未签名或签名不正确.如果这是基于Gradle的项目,请确保在Gradle构建脚本中指定了签名配置.
我正在尝试使用调试设置运行应用程序,因此不需要签署应用程序,因为它将在构建时获得临时签名.
在Java中处理加密\解密时,这个非常基本的代码段很常见.
final Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
cipher.doFinal(*something*);
Run Code Online (Sandbox Code Playgroud)
仅这三行,可能会抛出六个异常,我不确定处理它们的最干净(在代码可读性方面)是什么.尝试六个catch子句对我来说真的很像气味.
在使用这些物体时,是否有微图案或最佳实践,我显然不知道?
编辑
对不起,我想我没有很好地解释自己.我的问题不是关于避免try\catch子句,而是如果有一种常见的方法来处理类似的情况.
例外情况是
NoSuchPaddingException, NoSuchAlgorithmException
InvalidAlgorithmParameterException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException
Run Code Online (Sandbox Code Playgroud) 我使用1024 RSA生成了此测试公钥,然后在另一个编码平台中将其编码为DER和Base64.我将密钥复制到Android/Eclipse中的字符串中,我试图使用KeyFactory将其转换为公钥.无论我尝试什么,它都会不断给我一个InvalidKeySpecException.任何建议都将不胜感激.
private void prepKeys() {
String AppKeyPub = "MIGHAoGBAOX+TFdFVIKYyCVxWlnbGYbmgkkmHmEv2qStZzAFt6NVqKPLK989Ow0RcqcDTZaZBfO5" +
"5JSVHNIKoqULELruACfqtGoATfgwBp4Owfww8M891gKNSlI/M0yzDQHns5CKwPE01jD6qGZ8/2IZ" +
"OjLJNH6qC9At8iMCbPe9GeXIPFWRAgER";
// create the key factory
try {
KeyFactory kFactory = KeyFactory.getInstance("RSA");
// decode base64 of your key
byte yourKey[] = Base64.decode(AppKeyPub,0);
// generate the public key
X509EncodedKeySpec spec = new X509EncodedKeySpec(yourKey);
PublicKey publicKey = (PublicKey) kFactory.generatePublic(spec);
System.out.println("Public Key: " + publicKey);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) cryptography ×7
java ×6
encryption ×4
rsa ×3
android ×2
bouncycastle ×2
c# ×2
algorithm ×1
certificate ×1
exception ×1
h2 ×1
hibernate ×1
jdbc ×1
kdf ×1
pbkdf2 ×1
ruby ×1
security ×1
x509 ×1