首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RC4实现之间的差异

RC4实现之间的差异
EN

Stack Overflow用户
提问于 2016-11-04 13:59:57
回答 1查看 525关注 0票数 0

我必须在RC4中实现NodeJS密码,下面是代码:

代码语言:javascript
复制
function cipher (CRYPTO, str) {
  const cipher = crypto.createCipher(CRYPTO.cipherAlgorithm, CRYPTO.password);

  return Buffer.concat([
    cipher.update(str, 'utf-8'),
    cipher.final()
  ]).toString(CRYPTO.encoding);
}

const CRYPTO = {
  cipherAlgorithm: 'rc4',
  password: 'trololol',
  encoding: 'base64'
};

cipher(CRYPTO, '0612345678');
// returns 'yTXp/PZzn+wYsQ=='

当我使用打开的ssl检查我的实现时,我得到了相同的结果:

代码语言:javascript
复制
echo -ne "0612345678" |  openssl  rc4 -pass "pass:trololol" -e  -nosalt | base64
> yTXp/PZzn+wYsQ==

但是随着我们的合作伙伴的实现,结果就真的不一样了。它是用Java编写的,所以我试着做了一次,结果和他一样:

代码语言:javascript
复制
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import javax.xml.bind.DatatypeConverter;

public class Encryptor {
    private static String algorithm = "RC4";
    public static String encrypt(String key, String value) {
        try {
            SecretKeySpec rc4Key = new SecretKeySpec(key.getBytes(), algorithm);
            Cipher rc4 = Cipher.getInstance(algorithm);

            rc4.init(Cipher.ENCRYPT_MODE, rc4Key);
            byte [] encrypted = rc4.update(value.getBytes());
            return DatatypeConverter.printBase64Binary(encrypted);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }

    public static void main(String[] args) {
        String key = "trololol";
        String value = "0612345678";

        System.out.println(encrypt(key, value));
    }
}

运行上述操作将提供:

代码语言:javascript
复制
javac Encryptor.java && java Encryptor  
> LYlbWr0URiz+wA==

Java中的RC4算法是否可能与其他算法不同,或者在Java实现中有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-04 14:16:12

区别是“密码”和“密钥”。

例如,对于节点和OpenSSL,“密码”意味着要生成用于加密/解密的密钥的哈希值(使用MD5)。

如果您使用"password“值作为键(带有空IV),则将匹配从Java接收的值。例如,对于节点,更改为createCipheriv()函数:

代码语言:javascript
复制
crypto.createCipheriv(CRYPTO.cipherAlgorithm, CRYPTO.password, Buffer.alloc(0));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40424606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档