Rails和Java的通用加密算法

时间:2014-04-30 11:40:42

标签: java ruby-on-rails encryption password-encryption

我将整合两个用不同平台(Java和Ruby)编写的Web应用程序, 我必须在两个应用程序中使用通用加密算法密码。

两者都有通用的加密/解密算法吗?如果是,请提及任何有用的链接或任何示例。

非常感谢。提前致谢

此外,在我挖掘它的过程中,我找到了,

我在两者中都使用了带有DES的Base64,有趣的是,字符和特殊字符在两者中都给出了相同的结果,但是当我添加任何数字(1,2,3)时,一半的结果是相同的,一半加密是不同的东西。

* Ruby Code

 require 'openssl'
 require 'base64'

 c = OpenSSL::Cipher::Cipher.new("des")
 c.encrypt 
 c.key ="REPPIFY_ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 e = c.update("ankit@123")
 e << c.final
 puts Base64.encode64(e)

输出:Cbe9GslMs8mh33jAOD9qsw ==

* Java代码 我这里只定义加密方法: -

public static String encryptPassword(String pass) {

        public static final String DESKEY = "REPPIFY_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            System.out.println("Here is my password = "+pass);
        DESKeySpec keySpec = null;
        SecretKeyFactory keyFactory = null;
        SecretKey key = null;
        Cipher cipher = null;
        BASE64Encoder base64encoder = new BASE64Encoder();

        byte[] cleartext = null;
        String encrypedPwd = null;
            String pass = "ankit@123";

        try {
            keySpec = new DESKeySpec(DESKEY.getBytes("UTF8"));
            keyFactory = SecretKeyFactory.getInstance("DES");
            key = keyFactory.generateSecret(keySpec);
            if(pass!=null) {
                cleartext = pass.getBytes("UTF8");
                cipher = Cipher.getInstance("DES");
                cipher.init(Cipher.ENCRYPT_MODE, key);
                encrypedPwd = base64encoder.encode(cipher.doFinal(cleartext));
            }
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } // cipher is not thread safe 
        catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        System.out.println("Here I am printing encrypted pwd = "+encrypedPwd);
        return encrypedPwd;
    }

Java输出: - Cbe9GslMs8mWn9yTmZrUiw ==

2 个答案:

答案 0 :(得分:0)

嗯,在Ruby世界中,我推荐BCrypt,这也受到Devise等流行认证插件的青睐。我对Java不是很熟悉,但快速搜索表明在Java中也有BCrypt实现:

http://www.mindrot.org/projects/jBCrypt/

编辑 - BCrypt是单向加密,主要用于散列密码。如果您正在寻找可以加密和解密的东西,那么您将不得不查看其他内容。看到你提到它是密码,我建议你只想要单向加密。

答案 1 :(得分:0)

我得到了答案......只需在ruby代码中更改以下行,然后就可以在两者中使用带有DES的base64解码器:

c = OpenSSL :: Cipher :: Cipher.new(“DES-ECB”)

require 'openssl'
 require 'base64'

 c = OpenSSL::Cipher::Cipher.new("DES-ECB")
 c.encrypt 
c.key ="REPPIFY_ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 e = c.update("ankit@123")
 e << c.final
 puts Base64.encode64(e)