对于我的一个项目,我需要通过 Internet 云从 Arduino(使用 GSM 调制解调器)向 PHP Web 服务器发送 POST 请求。我需要将用户 ID 卡详细信息传输到网络服务器进行身份验证。
我尝试使用 RC4 安全算法,发现 Ardunio 和 PHP 都支持 - 所以我使用一些虚拟值的加密和解密进行得很好。
不过我有一个顾虑。假设我的秘密消息是 - '秘密'。RC4 加密后,加密字符串包含不可读的字符 - 所以问题是解密我不知道加密字符串的长度。
如果输入纯文本的长度为 6 ( 'Secret' ),则输出加密字符串也将始终为 6?
有了这个假设,我的加密/解密在 Arduino(C/C++ 堆栈)和 Web 服务器(PHP)中运行良好?
我在文档中有一些转储分析,显示了一堆加密数据,以及生成的解密数据.解释了所使用的算法(简单RC4).丢失的唯一信息是用于从加密数据到解密数据的密钥.
我正在编写本文档材料的自动化测试.我可以选择自己的一些密钥并从明文重新创建加密数据,但我想知道是否有任何简单的密码分析方法来找到用于加密原始数据束的原始密钥.
蛮力方法可能是可能的,因为关键是非常小,但我更感兴趣的是知道是否存在任何更聪明的方法.
下面是我目前的C加密代码(使用OpenSSL):
unsigned char source[16] = {
0xdb, 0xa3, 0x13, 0x30, 0x79, 0xa3, 0xcd, 0x9e,
0x48, 0xf4, 0x8f, 0x06, 0x37, 0x1b, 0x45, 0xdd};
unsigned char expected_target[16] = {
0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66};
unsigned char target[16] = {};
unsigned char key[16] = {};
RC4_KEY crypt_key;
RC4_set_key(&crypt_key, 16, key);
RC4(&crypt_key, 16, source, target);
printf("key = [%02x %02x %02x %02x %02x %02x %02x %02x "
"- %02x %02x %02x …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个需要大量加密强度伪随机字节的应用程序.
RC4密码对此非常理想; 它的重量轻,易于理解.所以,我得到了规范并用Python编写了一个RC4算法.
它完全按预期工作,但是,它像糖蜜一样慢.在我的Core i7 2.2GHz上,我只能从算法中获得大约1MB /秒的速度.
很明显,Python的解释性质并不是最适合这类任务的.我的问题是我不熟悉C编码 - 我用C做的最好的是一些Hello World的东西和一些文件读写的实验.无论哪种方式,我对C使用Python-C API肯定不够好.
我知道.NET/C#,我在Windows上用C#编写了相同的算法,并且我能够轻松地超过60MB /秒.所以.NET的CLR更加优化.但是,Python应用程序的目标平台是Unix/Linux.
理想情况下,我不想通过大量的中间层来获得优化的RC4密码到Python应用程序中.
由于RC4依赖于状态,理想情况下我会用类来做(这就是我用Python实现的方式.)所以,这里是我想要做的一小部分:
rc4 = RC4Encrypter()
rc4.seed(myKey) # seed the RC4 algorithm with bytes from string myKey
rc4.getRC4Bytes(1048576) # get the next 1MB of RC4 cryptostream bytes as a binary string
rc4.encryptWithRC4(myString) # encrypt myString's bytes with RC4 bytes using xor and return
Run Code Online (Sandbox Code Playgroud)
有什么建议?我很想学习C,但对于这个简单的项目来说,这是一个很大的学习曲线.
我得到了一个用rc4密钥加密的文件。
我获得了该密钥,并希望使用python脚本对其进行解密。
我怎样才能做到这一点?
我正在尝试使用 RC4 在 Go 中加密/解密一些数据。我发现 Go 在 crypto/rc4 包中提供了 rc4 算法。我尝试使用该包加密/解密数据,但密文和解密的明文不是我所期望的。
我RC4在线工具像比较这个,但我敢肯定,Go的RC4包有一些问题。因为在我用 Go rc4 加密明文并解密密文后,解密的明文'不是我加密的。我应该找其他图书馆吗?
我运行的代码是这样的。
package main
import (
"crypto/rc4"
"fmt"
"log"
)
func main() {
c, err := rc4.NewCipher([]byte("dsadsad"))
if err != nil {
log.Fatalln(err)
}
src := []byte("asdsad")
dst := make([]byte, len(src))
fmt.Println("Plaintext: ", src)
c.XORKeyStream(dst, src)
c.XORKeyStream(src, dst)
fmt.Println("Ciphertext: ", dst)
fmt.Println("Plaintext': ", src)
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的
Plaintext: [97 115 100 115 97 100]
Ciphertext: [98 41 227 117 93 79]
Plaintext': [111 154 128 …Run Code Online (Sandbox Code Playgroud)