私はこのvb.netコードを持っています(ただし、意味するコードはc#でも同等だと思います)Javaで複製する必要があり、とにかくそれを変更することはできません(複製するだけです):
Public Shared Function Encrypt(ByVal plainText As String, Optional key As String = "") As String
If String.IsNullOrEmpty(key) Then key = "sfdjf48mdfdf3054"
Dim encrypted As String = Nothing
Try
Dim inputBytes As Byte() = ASCIIEncoding.ASCII.GetBytes(plainText)
Dim pwdhash As Byte() = Nothing
'generate an MD5 hash from the password.
'a hash is a one way encryption meaning once you generate
'the hash, you cant derive the password back from it.
Dim hashmd5 As New MD5CryptoServiceProvider()
pwdhash = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key))
hashmd5 = Nothing
' Create a new TripleDES service provider
Dim tdesProvider As New TripleDESCryptoServiceProvider()
tdesProvider.Key = pwdhash
tdesProvider.Mode = CipherMode.ECB
encrypted = Convert.ToBase64String(tdesProvider.CreateEncryptor().TransformFinalBlock(inputBytes, 0, inputBytes.Length))
Catch e As Exception
Dim str As String = e.Message
Throw
End Try
Return encrypted
End Function
まさに、これは .NET Utility Class 関数です。
今、
複製の仕方がわからない
TripleDESCryptoServiceProvider()
Java コードでいくつかのコードを書き始めましたが、続行する方法がわかりません。
public static String encrypt(String plaintext, String enctoken){
if(enctoken == null)
enctoken = "sfdjf48mdfdf3054";
String encrypted = null;
byte[] plaintextByte = EncodingUtils.getAsciiBytes(plaintext);
//nel caso non funzionasse provare getBytes semplicemente
byte[] pwd = EncodingUtils.getAsciiBytes(Connessione.md5(enctoken));
try {
Cipher cipher = Cipher.getInstance("DESEDE/ECB/NoPadding");
SecretKeySpec myKey = new SecretKeySpec(pwd,"DESede");
cipher.init( Cipher.ENCRYPT_MODE, myKey);
try {
byte[] encryptedPlainText= cipher.doFinal(plaintextByte);
encrypted = Base64.encodeToString(encryptedPlainText, 0);
return encrypted;
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
アップデート:
コードを更新しました。今は良いはずです。Enctoken String は、文字列データの rappresentation (既知のもの) になります。このように、2 番目のパラメーターが NULL の場合にのみ、固定キーが設定されます。
更新 2
残念ながら、C# ハッシュは常に Java ハッシュとは異なります!! これをJavaで複製する方法は??
Dim hashmd5 As New MD5CryptoServiceProvider()
pwdhash = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key))
hashmd5 = Nothing
' Create a new TripleDES service provider
Dim tdesProvider As New TripleDESCryptoServiceProvider()
tdesProvider.Key = pwdhash
tdesProvider.Mode = CipherMode.ECB
encrypted = Convert.ToBase64String(tdesProvider.CreateEncryptor().TransformFinalBlock(inputBytes, 0, inputBytes.Length))
私はこの方法で試しましたが、うまくいきません:
ハッシュ
public static final String md5(byte[] s) {
try {
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] digest = m.digest(s);
String hash = EncodingUtils.getAsciiString(digest, 0, 16);
Log.i("MD5", "Hash: "+hash);
return hash;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}