在Ruby中计算字节是否具有奇数或偶数奇偶校验的最佳方法是什么?我有一个版本工作:
result = "AB".to_i(16).to_s(2).count('1').odd?
=> true
Run Code Online (Sandbox Code Playgroud)
将数字转换为字符串并计算"1"似乎是计算奇偶校验的一种不好的方法.有更好的方法吗?
我希望能够计算3DES密钥的奇偶校验.最终,我想将偶数字节转换为奇数.
谢谢,丹
我有一个项目,规定了24字节数据块的以下加密规则.
1)密码学应使用9797-1中定义的全三重DES MAC算法作为MAC算法3进行,输出变换3没有截断,而CBC模式下的DES作为ICV设置为零的分组密码.最后8个字节的加密数据构成了我们需要的值.
该程序说加密完成是错误的.为了符合上述规格,我还需要做其他事吗?
数据是一个24字节的值,加密的输出应该是8个字节,我猜(根据规范).我得到整个24字节作为输出:(
我编写了以下代码来实现上述规范:
des.KeySize = 128;
des.Key = ParseHex(key);
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.None;
ICryptoTransform ic = des.CreateEncryptor();
CryptoOutput = ic.TransformFinalBlock(CryptoOutput, 0, 24);
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个:
MACTripleDES des = new MACTripleDES(ParseHex(key));
byte[] CDCryptp = des.ComputeHash(CryptoOutput);
Run Code Online (Sandbox Code Playgroud) 我目前正在玩一本名为Violent Python的例子.你可以在这里看到我的实现
我现在正在尝试在Go中实现相同的脚本以比较性能,请注意我对Go来说是全新的.打开文件并遍历这些行很好,但是我无法弄清楚如何使用"加密"库以与Python的crypt.crypt(str_to_hash,salt)相同的方式对字符串进行散列.我觉得它可能就像
import "crypto/des"
des.NewCipher([]byte("abcdefgh"))
Run Code Online (Sandbox Code Playgroud)
但是,没有雪茄.任何帮助都会非常感激,因为将Go的并行性能与Python的多线程性能进行比较会非常有趣.
请帮助 php -> javascript(node.js) 转换
$key = crypt($key, $salt);
Run Code Online (Sandbox Code Playgroud)
我正在用 node.js 重写 php 脚本,但我在 php 中遇到了哈希签名生成问题,该签名是使用 crypt() 函数与盐匹配“CRYPT_EXT_DES”模式生成的
CRYPT_EXT_DES - 扩展的基于 DES 的哈希。“salt”是一个 9 个字符的字符串,由下划线后跟 4 个字节的迭代计数和 4 个字节的 salt 组成。这些被编码为可打印字符,每个字符 6 位,最低有效字符在前。值 0 到 63 编码为“./0-9A-Za-z”。在 salt 中使用无效字符将导致 crypt() 失败。
我对加密并没有真正的经验,并且研究有关 crypto 模块的 Node.js 文档也没有帮助。请帮助如何在node.js上实现这个!
我的测试用例如下:
echo crypt('string', '_....salt');//error
echo crypt('string', '_A...salt');//fast
echo crypt('string', '_AAAAsalt');//slow
Run Code Online (Sandbox Code Playgroud)
解释如http://www.php.net/manual/en/function.crypt.php所述:
CRYPT_EXT_DES - 扩展的基于 DES 的哈希。“salt”是一个 9 个字符的字符串,由下划线后跟 4 个字节的迭代计数和 4 个字节的 salt 组成。这些被编码为可打印字符,每个字符 6 位,最低有效字符在前。值 0 到 63 编码为“./0-9A-Za-z”。在 salt 中使用无效字符将导致 crypt() 失败。
点是可打印字符,那么为什么它会返回错误呢?哪个“顺序”适用于所使用的字符,导致“AAAA”比“A...”有更多的迭代次数?
如果这不是很明显,我首先要说的是我不是加密货币人士。
我的任务是在 Python 2.7 中复制 Java 的 PBEWithMD5AndDES(具有 DES 加密的 MD5 摘要)的行为。
我确实可以访问 Python 的加密工具包 PyCrypto。
下面是我试图复制其行为的 Java 代码:
import java.security.spec.KeySpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.spec.PBEParameterSpec;
import javax.crypto.Cipher;
import javax.xml.bind.DatatypeConverter;
public class EncryptInJava
{
public static void main(String[] args)
{
String encryptionPassword = "q1w2e3r4t5y6";
byte[] salt = { -128, 64, -32, 16, -8, 4, -2, 1 };
int iterations = 50;
try
{
KeySpec keySpec = new PBEKeySpec(encryptionPassword.toCharArray(), salt, iterations);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
AlgorithmParameterSpec …
Run Code Online (Sandbox Code Playgroud) 我写了一个 Java Card 小程序来做 DES 加密/解密。我的小程序的源代码(如果你想使用它,考虑到 Bodewes 先生在这个源代码中发现了一些错误(那些在他的答案下的评论中提到。所以修复它然后使用)具有以下功能:
我将我的程序输出和在线工具的输出进行了比较,最后我发现它们不同。所以我想使用 OpenSSL 检查我的程序输出的正确性。
这些是0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30
使用 key =加密的结果0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
:
::> SendToApplet.exe -key 1122334455667788 -data 3030303030303030
Command::
Data: 3030303030303030
Key : 1122334455667788
Results::
DES_ECB_ISO9797_M1:
8E 43 CF B8 91 02 01 38 .C.....8
DES_ECB_ISO9797_M2:
A6 DE 1C D9 1B A9 EE D0 ........
DES_ECB_NOPAD:
0B FC BF EE …
Run Code Online (Sandbox Code Playgroud) 偶尔,我会遇到一个有趣的,奇怪的事情:使用几个不同的密钥可以解密相同的加密文本块!
谁能告诉我出了什么问题?非常感谢.
请不要试图让我切换到三重DES/AES等,我只是想知道问题出在哪里 - 调用Java SDK的方式,还是Java SDK中的错误?
以下是Windows 7上的输出,在Linux框中的结果相同:
D:\>java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
D:\>java DESTest -e 12345678 abcde977
encrypted as [17fd146fa6fdbb5db667efe657dfcb60]
D:\>java DESTest -d 17fd146fa6fdbb5db667efe657dfcb60 abcde977
decryted as [12345678]
D:\>java DESTest -d 17fd146fa6fdbb5db667efe657dfcb60 abcde976
decryted as [12345678]
D:\>java DESTest -d 17fd146fa6fdbb5db667efe657dfcb60 abcde967
decryted as [12345678]
D:\>java DESTest -d 17fd146fa6fdbb5db667efe657dfcb60 abcde867
decryted as [12345678]
D:\>java DESTest -d 17fd146fa6fdbb5db667efe657dfcb60 abcdf867
Exception in thread "main" java.lang.RuntimeException: javax.crypto.BadPaddingEx …
Run Code Online (Sandbox Code Playgroud) 加密字符串时,它会'\n'
在字符串末尾生成。
这就是我进行加密的方式
public static String encrypt(String plainText) throws Exception {
byte[] tdesKeyData = Consts.getSecretKey().getBytes();
byte[] myIV = Consts.getInitializationVector().getBytes();
SecretKeySpec myKey = new SecretKeySpec(tdesKeyData, "DES");
IvParameterSpec ivspec = new IvParameterSpec(myIV);
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, myKey, ivspec);
byte[] plainTextBytes = plainText.getBytes("UTF-8");
byte[] buf = cipher.doFinal(plainTextBytes);
byte[] base64Bytes = Base64.encode(buf, Base64.DEFAULT);
String base64EncryptedString = new String(base64Bytes);
return base64EncryptedString;
}
Run Code Online (Sandbox Code Playgroud)
请有人指导我,我在这里做错了什么?提前致谢。
我有一个已由des.exe加密的文件。
\n\n可以使用以下命令对文件进行加密和解密:
\n\ndes -E -k "foo" sample.txt sample.txt.enc\ndes -D -k "foo" sample.txt.enc sample.txt.dec\n
Run Code Online (Sandbox Code Playgroud)\n\n我尝试使用以下方法解密:
\n\npublic byte[] Decrypt(FileInfo file, string key)\n{\n byte[] keyAsBytes = LibDesPasswordConvertor.PasswordToKey(key);\n byte[] initializationVector = keyAsBytes;\n\n var cryptoProvider = new DESCryptoServiceProvider(); \n cryptoProvider.Mode = CipherMode.CBC;\n cryptoProvider.Padding = PaddingMode.None; \n\n using (FileStream fs = file.OpenRead())\n using (var memStream = new MemoryStream())\n using (var decryptor = cryptoProvider.CreateDecryptor(keyAsBytes, initializationVector))\n using (var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Write))\n {\n fs.CopyTo(cryptoStream);\n fs.Flush();\n cryptoStream.FlushFinalBlock();\n\n return memStream.ToArray();\n }\n}\n\npublic static …
Run Code Online (Sandbox Code Playgroud) des ×10
encryption ×6
cryptography ×3
java ×3
3des ×2
c# ×2
crypt ×2
php ×2
.net ×1
android ×1
go ×1
hash ×1
javascript ×1
md5 ×1
node.js ×1
openssl ×1
parity ×1
python ×1
python-2.7 ×1
ruby ×1