我正在使用Ruby实现Java库。我遇到过以下路障。是否可以在ruby中实现以下代码?是否有任何ruby等价的byte [],IvParameterSpec,SecretKeySpec?
private String decrypt(String token)
{
//parse token into its IV and token components
byte[] ivAndToken = Base64.decodeBase64(token);
byte[] iv = new byte[ivLength];
System.arraycopy(ivAndToken, 0, iv, 0, ivLength);
int length = ivAndToken.length - ivLength;
byte[] tokenBytes = new byte[length];
System.arraycopy(ivAndToken, ivLength, tokenBytes, 0, length);
//prepare initialization vector specification
IvParameterSpec spec = new IvParameterSpec(iv);
//create cipher instance based on transformer params
Cipher cipher = Cipher.getInstance(algorithm + mode + padding, CRYPTO_PROVIDER);
//convert key bytes into valid key format
Key key = new SecretKeySpec(Base64.decodeBase64(symkey), algorithm);
//initialize cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, key, spec);
//decrypt the payload
String plaintext = new String(cipher.doFinal(tokenBytes));
return plaintext;
}
答案 0 :(得分:1)
如果您希望算法的行为与Java中的行为完全相同,那么您可能必须在Ruby上实现IvParameterSpec
和SecretKeySpec
。 byte[]
当然只是一个字节数组。您可能希望在他们的文档(上面的链接),并希望您了解分组密码操作模式工作。
如果不这样做,SecretKey引用对称密钥(例如:密码),IV是initialization vector,用于对同一明文进行不同加密的加密随机数生成不同的密文。除ECB外,所有操作模式都需要IV。有关详细信息,请参阅此wikipedia page。