Ruby相当于

时间:2010-08-27 23:57:20

标签: java ruby

我正在使用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;

} 

1 个答案:

答案 0 :(得分:1)

如果您希望算法的行为与Java中的行为完全相同,那么您可能必须在Ruby上实现IvParameterSpecSecretKeySpecbyte[]当然只是一个字节数组。您可能希望在他们的文档(上面的链接),并希望您了解分组密码操作模式工作。

如果不这样做,SecretKey引用对称密钥(例如:密码),IV是initialization vector,用于对同一明文进行不同加密的加密随机数生成不同的密文。除ECB外,所有操作模式都需要IV。有关详细信息,请参阅此wikipedia page