小编Maa*_*wes的帖子

从cryptostream读取到流的末尾

我在使用下面的代码时遇到了一些麻烦.我有一个临时位置的文件,需要加密,这个功能加密该数据,然后存储在"pathToSave"位置.

在检查时似乎没有正确处理整个文件 - 我的输出中缺少一些内容,我怀疑它与没有在整个流中运行的while循环有关.

顺便说一句,如果我尝试在while循环后调用CryptStrm.Close(),我会收到一个异常.这意味着如果我尝试解密文件,我会得到一个已经在使用的文件错误!

尝试了所有平常和我在这里看到类似的问题,任何帮助都会很棒.

谢谢

public void EncryptFile(String tempPath, String pathToSave)
    {
        try
        {
            FileStream InputFile = new FileStream(tempPath, FileMode.Open, FileAccess.Read);
            FileStream OutputFile = new FileStream(pathToSave, FileMode.Create, FileAccess.Write);

            RijndaelManaged RijCrypto = new RijndaelManaged();

            //Key
            byte[] Key = new byte[32] { ... };

            //Initialisation Vector
            byte[] IV = new byte[32] { ... };

            RijCrypto.Padding = PaddingMode.None;
            RijCrypto.KeySize = 256;
            RijCrypto.BlockSize = 256;
            RijCrypto.Key = Key;
            RijCrypto.IV = IV;

            ICryptoTransform Encryptor = RijCrypto.CreateEncryptor(Key, IV);

            CryptoStream CryptStrm = new CryptoStream(OutputFile, Encryptor, …
Run Code Online (Sandbox Code Playgroud)

c# encryption cryptography aes rijndaelmanaged

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

你应该避免使用Guavas Ordering.usingToString()吗?

在阅读Joshua Bloch的"Effective Java"之后,这个问题得到了提示.特别是在第10项中,他认为解析对象的字符串表示并将其用于除了友好的打印输出/调试之外的任何事情都是不好的做法.原因是这样的使用"容易出错,导致脆弱的系统在您更改格式时会中断".对我而言,看起来Guava Ordering.usingToString()是一个例子.那么使用它是不好的做法吗?

java guava effective-java

4
推荐指数
1
解决办法
290
查看次数

Java - 泛型 - Class"Class <?>"的显式转换和强制转换方法

为什么castClass<?>Class 上使用该方法会在编译时产生未经检查的警告?

如果你偷看了cast方法,你会发现这个代码:

public T cast(Object obj) 
{
    if (obj != null && !isInstance(obj))
        throw new ClassCastException(cannotCastMsg(obj));
    return (T) obj; // you can see there is a generic cast performed here
}
Run Code Online (Sandbox Code Playgroud)

如果我做一个通用演员,编译器抱怨说有unchecked warning.


其他背景资料

你可以找到的我如何到达书有效的Java 2版本中这个问题,第166页(的PDF)的例子.

作者写了这段代码

public <T> T getFavorite(Class<T> type) 
{
    return type.cast(favorites.get(type));
}
Run Code Online (Sandbox Code Playgroud)

VS

public <T> T getFavorite(Class<T> type) 
{
    return (T) (favorites.get(type));
}
Run Code Online (Sandbox Code Playgroud)

我只是没有得到差异,为什么编译器抱怨未经检查的警告.最后,两段代码都做了一个明确的演员(T) object,不是吗?

java generics casting effective-java

4
推荐指数
1
解决办法
1119
查看次数

如果default_charset为空,则字符集是什么

在PHP 5.6起default_charset字符串设置"UTF-8"为解释,例如php.ini的文档.它表示早期版本的字符串为空.

当我创建一个与PHP通信的Java库时,我需要知道在内部处理字符串时我应该期待哪些值.如果default_charset字符串为空并且(文字)字符串包含ASCII范围之外的字符会发生什么?我应该期望平台的默认字符编码,还是用于源文件的字符编码?

php string character-encoding

4
推荐指数
1
解决办法
5392
查看次数

围绕AesManaged的这个包装好吗?

我需要加密/解密一些字符串.我根据msdn文档构建了我的包装类,但有一些更改.

由于我想使用给定的字符串/密码来加密/解密数据,因此我不会AesManaged用于创建密钥.(用户应该能够使用他输入的密钥加密/解密,因此我无法使用密钥AesManaged,我无法保存密钥).

我改为通过使用Rfc2898DeriveBytes(PBKDF2)给定盐来创建密钥.使用给定的盐,因为我没有存储密钥,因此我认为盐必须始终相同.

然后我创建一个IV,加密给定的字符串并连接IV和加密的字符串.这将最终保存在文件中.这意味着IV与加密数据一起保存.

问题:

  1. 可以将IV与加密数据一起存储吗?
  2. 有没有其他方法来创建密钥而不是每次都使用相同的盐(基于给定的密码)?
  3. 这种加密是使用AES128还是AES256完成的?
  4. IV总是16个字节,还是可以改变?

    static void Main(string[] args)
    {
        const string stringToEncrypt = "String to be encrypted/decrypted. Encryption is done via AesManaged";
        const string password = "m1Sup3rS3cre!Password";

        string encrypted = EncryptString(stringToEncrypt, password);
        string roundtrip = DecryptStringFromBytes_Aes(encrypted, password);

        Console.WriteLine("Original:   {0}", stringToEncrypt);
        Console.WriteLine("Round Trip: {0}", roundtrip);

        Console.ReadLine();
    }

    static string EncryptString(string plainText, string password)
    {
        string encryptedString;

        using (AesManaged aesAlg = new AesManaged())
        {
            aesAlg.Key = PasswordAsByte(password);
            ICryptoTransform encryptor …
Run Code Online (Sandbox Code Playgroud)

.net c# encryption aes encryption-symmetric

4
推荐指数
1
解决办法
1284
查看次数

在Java Card中进行递归编程时捕获内存异常

虽然Java Card不推荐使用递归编程风格,但我想对Fibonacci算法进行一些测试.我编写了一个函数来计算Fibonacci的大整数套件(由字节数组表示).

我的代码如下:

public static byte[] fibonacci(byte[] n) {
    if (isLEThan1(n)) {
        return n;
    }
    else {
        return add(fibonacci(subtract(n, new byte[]{0x01})),fibonacci(subtract(n,new byte[]{0x02})));
    }
}
Run Code Online (Sandbox Code Playgroud)

如果字节数组表示的整数小于或等于1,则boolean isLEThan(byte[])返回where,true否则返回false.

byte[] add(byte[], byte[])并对byte[] subtract(byte[], byte[])由字节数组表示的大整数实现加法和减法.它们返回一个包含操作结果的新字节数组.

我认为通过给上面描述的函数提供一个大数组,我将得到一个异常,例如SystemException.NO_RESOURCE由于递归调用而减去实例化的数组.

但我必须认为我没有抓住正确的例外,因为我得到6F00了状态字.

这是我考虑的例外列表:

try {
        fibonacci(array);
    } catch (ArithmeticException e) {
        ISOException.throwIt((short) 0x0100);
    } catch (ArrayStoreException e) {
        ISOException.throwIt((short) 0x0200);
    } catch (APDUException e) {
        ISOException.throwIt(Util.makeShort((byte) 0x03,
            (byte) e.getReason()));
    } catch (CryptoException e) {
        ISOException.throwIt(Util.makeShort((byte) 0x04, …
Run Code Online (Sandbox Code Playgroud)

java recursion exception smartcard javacard

4
推荐指数
1
解决办法
150
查看次数

如何减小javacard applet的大小

我写了一个在磁盘上有19 KB大小的applet.它有三个类.第一个是从Applet扩展的,第二个是静态函数,第三个是我在applet中创建实例的类.

我有三个问题:

  1. 有没有办法找出我的javacard中的applet实例占用了多少大小?
  2. 有没有减少javacard applet(.cap文件)大小的工具?
  3. 你能解释一下帮助我减少applet大小的规则吗?

applet smartcard javacard globalplatform

4
推荐指数
1
解决办法
447
查看次数

如何获得 PCCERT_CONTEXT 私钥的 NCRYPT_KEY_HANDLE?

如何从 Windows 证书存储库中NCRYPT_KEY_HANDLE的 a 的私钥获取使用 CNG 的加密/解密PCCERT_CONTEXT

CryptEncrypt函数已被NCryptEncryptBCryptEncrypt函数取代,但没有立即明显的方法PCCERT_CONTEXT从 Windows 证书存储中的a 获取这两个函数中的任何一个的句柄。

甚至可以使用 CNG 功能使用证书(的私钥)进行加密/解密,而无需解析为导出证书之类的蛮力方法?

c++ cryptography cng

4
推荐指数
1
解决办法
1220
查看次数

Java的keytool不提示输入密钥密码

Javakeytool有一个名为 的参数-keypass,除了用于整个密钥存储的密码之外,它还允许您设置一个(单独的)密码来保护您的私钥。

根据文档:

的值-keypass是用于保护生成的密钥对的私钥的密码。如果未提供密码,则会提示用户输入密码。如果在提示时按 Return 键,则密钥密码将设置为与密钥库密码相同的密码。该-keypass值必须至少包含六个字符。

但是,当我在调用此命令时省略密码时,我似乎根本没有收到提示,至少在与-genkeypair生成 RSA 密钥对结合使用时没有提示。相反,我只获得一般帮助页面。如果我使用""强制输入“空”密码,那么它(正确地)告诉我密码应至少为 6 个字符。

有没有办法强制提示keytool输入特定于密钥的密码,而不必根据 的文档在命令行上提供它-genkeypair


我已经针对 Java 11 LTS 对此进行了测试:

keytool -genkeypair -alias test1 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keystore test.pfx -storepass test1234
        -keypass
Run Code Online (Sandbox Code Playgroud)

或者

keytool -genkeypair -alias test1 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keystore test.pfx -storepass test1234
        -keypass ""
Run Code Online (Sandbox Code Playgroud)

两者似乎都不起作用;如您所见,我已经将-keypass参数移到了末尾,因此它无法将参数作为密码吞噬。

java passwords prompt keystore keytool

4
推荐指数
1
解决办法
4062
查看次数

RSA 密钥的 PKCS#1、PKCS#8 与 PKCS#12

如果您现在才开始使用,建议使用什么 RSA 密钥格式?

  1. 我知道 PKCS#1 是专用于 RSA 密钥的格式,但我是否需要避免使用它,因为它很旧?

  2. 推荐使用的 RSA 密钥格式是 PKCS#1、PKCS#8 或 PKCS#12?

cryptography rsa pkcs#12 pkcs#8 pkcs#1

4
推荐指数
1
解决办法
5123
查看次数