小编Maa*_*wes的帖子

Java中的DH密钥协议:为什么生成的密钥对于双方来说大多相同?

我正在尝试用Java创建一个非常简单的密钥交换.在代码和输出之后有问题:

 public class Blergh {

    public static KeyPair genKeyPair512() {
        try {
            AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator
                    .getInstance("DH");
            paramGen.init(512);

            BigInteger g = new BigInteger(
                    "7961C6D7913FDF8A034593294FA52D6F8354E9EDFE3EDC8EF082D36662D69DFE8CA7DC7480121C98B9774DFF915FB710D79E1BCBA68C0D429CD6B9AD73C0EF20",
                    16);
            BigInteger p = new BigInteger(
                    "00AC86AB9A1F921B251027BD10B93D0A8D9A260364974648E2543E8CD5C48DB4FFBEF0C3843465BA8DE20FFA36FFAF840B8CF26C9EB865BA184642A5F84606AEC5",
                    16);
            final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
            final DHParameterSpec dhSpec = new DHParameterSpec(p, g, 511);
            keyGen.initialize(dhSpec);
            return keyGen.generateKeyPair();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static byte[] genSharedSecretKey(KeyPair keyPair,
            byte[] bytesPeerPublicKey) {
        PrivateKey privateKey = keyPair.getPrivate();

        try {
            X509EncodedKeySpec x509KeySpec …
Run Code Online (Sandbox Code Playgroud)

java cryptography

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

ISO 7816-3 T = 0如何工作?

我正在尝试理解发送APDU命令 - 响应对的通信.任何人都可以用简单的方式解释T = 0的工作原理吗?

APDU和TPDU有什么区别?

例如,命令头是CLA,INS,P1,P2和P3 = 0x20 32字节数据.卡如何知道命令的第5个字节是Lc还是Le?卡如何知道不期望任何命令数据,以及它如何知道读者是否期望响应中的数据?

另一件事,过程字节何时参与场景?是程序字节吗?或者,程序字节?卡是否必须发送过程字节?

smartcard

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

当数据阵列的第一个条目为零时,使用RSA加密获得太短的数组

我试图使用java bouncy castle库来使用RSA来解密和解密一个短字节数组.我做了以下步骤:

  1. 生成2048位密钥对.
  2. 创建一个短数据字节数组,其中第一个条目为零.
  3. 使用生成的密钥和RSA加密数据阵列.
  4. 使用生成的密钥和RSA解密加密的数据阵列.
  5. 比较原始和解密的数据数组.

我注意到原始和解密的数据数组不一样.解密的数据数组缺少第一个条目,因此比原始数据数组短1.仅当数据数组的第一个条目为"0"时才会发生这种情况.为什么会这样?解密不应该返回相同的数据数组吗?或者我对图书馆的假设,使用和理解是错误的?

这里是完整的测试用例(带有导入以便更好地理解):

import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.math.BigInteger;
import java.security.*;
import java.security.spec.RSAKeyGenParameterSpec;
import java.util.Arrays;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

import org.bouncycastle.crypto.DataLengthException;
import org.bouncycastle.crypto.InvalidCipherTextException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.jce.provider.JDKKeyPairGenerator;
import org.bouncycastle.util.encoders.Hex;
import org.hive2hive.core.H2HJUnitTest;
import org.junit.Test;

public class EncryptionUtil2Test {

    @Test
    public void testBug() throws IOException, InvalidKeyException, IllegalBlockSizeException,
        BadPaddingException, DataLengthException, IllegalStateException, InvalidCipherTextException,
        NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException,
        InvalidAlgorithmParameterException {

        Security.addProvider(new BouncyCastleProvider());

        // generate RSA keys
        BigInteger publicExp = new BigInteger("10001", 16); // Fermat …
Run Code Online (Sandbox Code Playgroud)

java arrays encryption rsa bouncycastle

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

加密处理器和协处理器之间的差异

我正在尝试使用加密和解密算法处理问题,我使用下面的程序来测试我的要求,我意识到一个奇怪的问题.

我正在使用polarssl来满足我的加密和解密需求.

当我使用此命令在intel处理器上使用icc编译器编译它时,此程序运行良好:(来自polarssl的aes.c)

icc Deneme.c aes.c -o deneme
Run Code Online (Sandbox Code Playgroud)

输出:

Encryption result, encrypted value:
11 22 7 86 a2 d3 ed 95 b9 14 c0 57 f7 af 5f dc 93 66 77 68 44 12 9f 1b 72 6a ea 51 b8 f7 1d a4
Decryption result, plain array:
a2 d8 69 9c 77 73 c7 5e 1d 3b 83 26 6e 2f 35 30 9d f0 f2 e5 0 0 0 0 0 0 0 0 0 0 0 …
Run Code Online (Sandbox Code Playgroud)

c encryption intel icc polarssl

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

加密(模式和填充)

我的任务是编写一个涉及加密的小型Java控制台应用程序.我不熟悉加密,所以我必须先做一些阅读.到目前为止,给出的高级要求是AES-256应该用于生成一次性密钥来加密文件.

之后,应使用收件人的公钥(RSA-2048)来加密该AES-256一次性密钥.然后,加密文件和加密的一次性AES-256密钥将被压缩并发送给收件人.

根据我对读取加密和解密的理解,除了算法(RSA,AES等)之外,还有称为模式和填充的东西.例如,以下代码将RSA指定为算法,ECB模式和PKCS1Padding.

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)

在加密和解密中必须使用相同的算法,模式和填充.因此,我可以向用户询问他们想要的模式和填充是否合理?

我注意到Cipher cipher = Cipher.getInstance("RSA")似乎使用了ECB的默认模式和PKCS1Padding的填充,因此这行代码与上面相同.那么可以假设ECB模式和PKCS1Padding模式将默认用于RSA-2048吗?

java encryption cryptography public-key-encryption

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

等待然后接收文本字段输入而不冻结GUI

我希望我不会重复一个问题,但我找不到专门针对我的问题.我正在开发一个小型数学闪存卡应用程序,使用JavaFX创建GUI.该计划应如下运行:

  1. 用户选择设置,然后按开始按钮.
  2. gui显示用户输入的问题和文本字段.
  3. 用户在X秒内输入答案或gui自动移动到下一个问题 - 或者,用户可以通过按下一个按钮立即转到下一个问题.
  4. GUI显示得分和平均值.

问题getText()来自用户文本字段,只要按下开始按钮就会处理,而不会给用户输入答案的机会.在处理用户的答案之前,如何让程序等待X秒或者单击下一个按钮?这是我的代码:

//start button changes view and then runs startTest()
start.setOnAction(e -> {

        setLeft(null);
        setRight(null);

        setCenter(test_container);
        running_program_title.setText(getDifficulty().name() + " Test");
        buttons_container.getChildren().clear();
        buttons_container.getChildren().addAll(next, quit, submit);

        startTest();
    });
Run Code Online (Sandbox Code Playgroud)

这是问题代码......至少我是怎么看的.

//startTest method calls askAdd() to ask an addition question
void startTest() {

    int asked = 0;
    int correct = 0;

    while (asked < numberOfQuestions) {
        if(askAdd()){
        correct++;
        asked++;
    }
}

boolean askAdd() {

    int a = (int) …
Run Code Online (Sandbox Code Playgroud)

java user-interface multithreading javafx freeze

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

在jshell中查看类路径

JShell是Java的REPL.要在默认JRE之外使用其他类,它包含一个/classpath命令,用于添加当前类路径的路径.

有没有办法在JShell环境中查看当前的类路径?


请注意,我正在使用以下早期版本:

java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+111)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+111, mixed mode)
Run Code Online (Sandbox Code Playgroud)

java classpath read-eval-print-loop java-9 jshell

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

如何将AES CCM与Bouncycastle JCE提供商一起使用 - CCMParameters

是否可以使用JCE执行CCM?

我在互联网上看到很多使用非JCE bouncycastle类的例子.特别是,我看到他们在CCMParameters对象中调用init传递.

麻烦的是,这个CCMParameters对象不是从AlgorthmParameters或AlgorithmParameterSpec派生的,所以似乎无法将它传递给Cipher.init()(在使用Cipher.getInstance("AES/CCM/NoPadding")获取Cipher对象之后) ).

怎么做到这一点?

java encryption bouncycastle jce aes

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

在exoplayer android中使用AES的在线加密流视频文件

我有使用存储在服务器上的AES加密的视频文件.如何在exoplayer中在线流式传输?我不想下载文件并解密它:等待下载完成然后播放解密文件.

encryption video-streaming exoplayer

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

爪哇。LoraWan 包装说明。AES-128

乍一看,我和很多人有同样的问题。但我的情况有点复杂。

先决条件:
项目语言: Java 11
网络服务器: Orbiwise NS ( https://eu.saas.orbiwise.com/ )
设备:(STM32 + Wifi 模块)通过 Lorawan 网关连接到 Orbiwise 并通过 wifi 使用 TCP 套接字。

输入数据:
来自TCP 套接字接收的字节数组:

40 24 fa fa 01 c2 c5 25  03 06 01 43 a4 99 5a c1
85 71 0c 87 38 84 53 9a  80 6c 5a 14 da f8 ff 7c
21 83 8f 78 8e ec f2 7d  4e 4e 07  
Run Code Online (Sandbox Code Playgroud)

(43 个字节)

Orbiwise 上有对应的上行 …

java encryption aes lorawan

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