我将整合两个用不同平台(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 ==
答案 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)