- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在与 reed-solomon 合作。据我所知,第一个纠错码总是与对数据字进行异或运算相同,因为范德蒙矩阵的第一行始终为 1 并且伽罗华域中的元素相加等同于异或运算。
现在我尝试使用 ReedSolomonEncoder 的 Zxing 3.3.0 实现来获取一些代码字。请参阅以下 Java list :
ReedSolomonEncoder rs = new ReedSolomonEncoder(GenericGF.QR_CODE_FIELD_256);
int[] codeword = {72,87,0,0};
rs.encode(codeword, 2);
System.out.println("Ecc for " + codeword[0] + " and " + codeword[1]);
System.out.println("XOR: " + (72^87));
System.out.println("RS #1: " + codeword[2]); // Shouldn't this be 31 too?
System.out.println("RS #2: " + codeword[3]);
给出以下输出:
Ecc for 72 and 87
XOR: 31
RS #1: 28
RS #2: 3
有两种可能:
或者这是一个错误,我不相信。
最佳答案
它是编码消息的异或的第一个综合症,并且仅当生成多项式的形式为 (x+1) (x+α) (x+α^2) ... 时。在这种情况下,“第一连续根”为1。对于其他实现,“第一连续根”为α,生成多项式为(x+α) (x+α^2) (x+α^3) ……生成多项式的选择还有其他变体,例如 GF(256) 中的 (x+a^127)(x+a^128) 对于自倒数多项式,1x^2 + ??x + 1。
GF(256) 在这种情况下基于 9 位多项式 x^8+x^4+x^3+x^2+1 或十六进制 11d 。 α 是原语,在这种情况下 α = x+0 == hex 02。
生成多项式为(1x + 1) (1x + 2) = 1x^2 + 3x + 2。编码过程可以形象化为长除法,如下图十六进制所示。消息乘以 x^2(用两个零填充)为两个奇偶校验字节留出空间:
48 8f
------------
1 3 2 |48 57 00 00
48 d8 90
--------
8f 90 00
8f 8c 03
--------
1c 03 remainder
余数是从填充的消息中减去的,但是加减都是互斥的或者对于GF(256),所以编码后的消息变成了
48 57 1c 03
与您得到的结果相匹配(十六进制 1c = 十进制 28)。
解码时,在这种情况下,syndrome[0] 是消息中所有字节的异或。证候也可以形象化为长除法(证候计算不使用padding):
syndrome 0: syndrome 1:
48 09 03 48 c7 8f
------------ ------------
1 1 |48 57 1c 03 1 2 |48 57 1c 03
48 48 48 90
----- -----
1f 1c c7 1c
1f 1f c7 93
----- -----
03 03 8f 03
03 03 8f 03
----- -----
00 00
通过将 57 更改为 56 创建错误值 01:
48 1e 02 48 c6 8d
------------ ------------
1 1 |48 56 1c 03 1 2 |48 56 1c 03
48 48 48 90
----- -----
1e 1c c6 1c
1e 1e c6 91
----- -----
02 03 8d 03
02 02 8d 07
----- -----
01 04
关于java - Reed-Solomon 的第一个 ECC 是否总是与 xor 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44117632/
我正在尝试找出如何检查安装的内存 (RAM) 是 ECC 还是非 ECC我需要通过使用 WMI 类的 C# 来做到这一点。 你们有什么想法吗? 提前谢谢 最佳答案 您可以查询 WMI Win32_Ph
Kotlin 中是否有任何关于椭圆曲线加密的信息? 用于生成 key 对和加密、解密消息。 关于这个主题的信息很少甚至没有。 例如,我想实现 ECC P-521 椭圆曲线。 是否可以在 Kotlin
这里是我用 Java 编写的代码,但签名生成和验证的过程给出了不同的结果。 请任何人帮助解决这个问题。我将非常感谢您的支持。 package ecdsa.draft; import java.math
大家好,请原谅我的英语我开发了一个大整数函数 c : #ifndef __BIGINTEGER_H #define __BIGINTEGER_H #include #include #include
我目前正在使用双相加算法编写椭圆曲线加密的 C 代码。我面临着我不明白的段错误问题。我希望你们中有人能有一个想法。 #include "lib/include/gmp.h" #include #in
我正在尝试使用 SECP-256K1(比特币的 ECC 曲线)对某些数据进行 SHA256withECDSA 签名,代码如下。这些代码并不总是能正常工作,有时可能会相当不稳定。 我需要帮助稳定下面的代
我正在阅读 Christoffer Paares 书中关于椭圆曲线密码学的部分(“理解密码学”)。我决定在 python 中实现一个用于椭圆曲线点加法和点加倍的函数。对于我的测试,我使用了书中的示例,
想起来很久没写博客了,刚好今天要写实验报告,随便把之前的也完成吧 1.椭圆曲线概念 椭圆曲线在经过化解后,可以用这条式子表达:E:y²=x³+ax+b 其背后的密码学原理,是基
我有 48 字节 ECC secp192r1 签名,可以在其他环境中工作: byte[] signature = new byte[]{(byte)0x08, (byte)0x33, (byte)0x
您好,我正在尝试解码包含 ECC 公钥的对象 但我去 umarshaling 错误说不能正确解码对象。 我正在尝试执行以下操作: var privateKey *ecdsa.PrivateKey va
最新版本的 Java 不支持 ECC Brainpool 曲线。当我读取包含 EC Curve Brainpool 的 X509Certificate 时,出现异常。 我发现 Java 不支持带有 B
java.security.PublicKey#getEncoded() 返回 key 的 X509 表示,与原始 ECC 值相比,在 ECC 的情况下增加了大量开销。 我希望能够以最紧凑的表示形式(
是否有针对 Java 的 ECC(纠错代码)库(例如 Reed-Solomon)的众所周知的实现,它具有友好的开源许可(非 GPL)? 最佳答案 zxing Apache 许可证(不确定这是否符合您对
大多数可用的桌面(廉价)x86 平台现在仍然不支持 ECC 内存 (Error Checking & Correction)。但内存位翻转错误率仍在增长(not the best SO thread,
我正在尝试使用 iOS 上的 KeyChain 创建 Curve25519 key 。我知道 CryptoKit 的存在,不幸的是,它不适用于 iOS 12。有没有办法在 CryptoKit 之前创建
我们需要将数据从 ECC 表实时提取到 Azure 数据湖。Azure 数据工厂具有与 SAP ECC 系统的连接选项,但不支持实时摄取。 请告诉我 Azure/SAP 中是否有任何可用的 nativ
我想要(或创建)基于椭圆 key 加密的序列 key 。我想做的是将信息编码在序列中,这些信息可以公开验证,但只能由我创建。最初的想法来自http://www.ssware.com/cryptolic
我在我的项目中使用 php OpenSSL。如何使用单个私钥创建多个公钥? 在 RSA 中我们不能做这样的事情。但是 ECC 呢? 最佳答案 根据定义,对于一般椭圆曲线密码系统中的每个私有(priva
我想(或创建)基于椭圆 key 加密的串行 key 。我想做的是在序列中编码信息,这些信息可以公开验证但只能由我创建。最初的想法来自http://www.ssware.com/cryptolicens
我在我的项目中使用 php OpenSSL。如何使用单个私钥创建多个公钥? 在 RSA 中我们不能做这样的事情。但是 ECC 呢? 最佳答案 根据定义,对于一般椭圆曲线密码系统中的每个私有(priva
我是一名优秀的程序员,十分优秀!