2010-08-27 3 views
1

Я занимаюсь реализацией библиотеки Java в Ruby. Я встретил следующий дорожный блок. Можно ли реализовать следующий код в рубине? Существуют ли какие-либо эквиваленты ruby ​​для байт [], IvParameterSpec, SecretKeySpec?Ruby Equivalent

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

Если вы используете jruby, вы можете обернуть свой код Java ... – rogerdpack

ответ

1

Вы, вероятно, придется реализовать как IvParameterSpec и SecretKeySpec на Ruby, если вы хотите, чтобы алгоритм вести себя так же, как это делает в Java. byte[] - это, конечно, просто байтовый массив. Вероятно, вы захотите в документах для них (ссылки выше), а также, надеюсь, вы понимаете, что работают режимы работы блочного шифрования.

Если вы этого не сделаете, SecretKey ссылается на симметричный ключ (например, кодовая фраза), а IV - initialization vector, криптографическое nonce, используемое для разных шифровок одного и того же открытого текста, генерирует различный шифротекст. IV необходимы для всех режимов работы, кроме ECB. См. Это wikipedia page для более подробной информации.

+0

Если вы используете 'byte' в Java, вы, вероятно, захотите использовать строку в Ruby и все функции упаковки и распаковки строк/массивов – horseyguy