一次性密码(OTP)C#到Java的代码转换

一次性密码(OTP)C#到Java的代码转换,c#,java,md5,hmac,C#,Java,Md5,Hmac,去年我用C#编写了一个一次性密码(OTP)生成器。现在我需要在Java中使用OTP生成器,但在Java中找不到等效的函数 这是我去年写的代码:(我知道这个OTP的安全性很低,但我不需要防弹的) 下面是我试图将C#转换成的Java代码:(这只是SHA1部分,我找不到如何用Java编写HMAC-MD5) import java.io.*; 导入java.security.*; 公共类otp{ /** *@param args *@抛出异常 */ 公共静态void main(字符串[]args)引发I

去年我用C#编写了一个一次性密码(OTP)生成器。现在我需要在Java中使用OTP生成器,但在Java中找不到等效的函数

这是我去年写的代码:(我知道这个OTP的安全性很低,但我不需要防弹的)

下面是我试图将C#转换成的Java代码:(这只是SHA1部分,我找不到如何用Java编写HMAC-MD5)

import java.io.*;
导入java.security.*;
公共类otp{
/**
*@param args
*@抛出异常
*/
公共静态void main(字符串[]args)引发IOException{
System.out.println(“请输入您的用户名:”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串username=br.readLine();
System.out.println(“请输入您的密码:”);
字符串密码=br.readLine();
试一试{
MessageDigest md=MessageDigest.getInstance(“SHA1”);
字符串输入=密码;
md.update(input.getBytes());
字节[]输出=md.digest();
System.out.println();
System.out.println(“SHA1(\”“+input+\””);
System.out.println(“+bytesToHex(输出));
}捕获(例外e){
System.out.println(“异常:+e”);
}
}
公共静态字符串bytesToHex(字节[]b){
字符hexDigit[]={'0','1','2','3','4','5','6','7',
‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’};
StringBuffer buf=新的StringBuffer();
对于(int j=0;j>4)和0x0f]);
追加(十六进制数字[b[j]&0x0f]);
}
返回buf.toString();
}
}
谢谢你的帮助

我一直使用

您可以查看以下几页:

或者坚持使用Java 6:

Mac hmacMd5 = Mac.getInstance("HMACMD5");

对于那些不知道的人来说,OTP是“一次性密码”的缩写。(只是想为维基百科节省带宽:-)谢谢你的链接。我去看看。
import java.io.*;
import java.security.*;

public class otp {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {

    System.out.println("Please enter your username:");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String username = br.readLine();
    System.out.println("Please enter your password:");
    String password = br.readLine();

    try {
         MessageDigest md = MessageDigest.getInstance("SHA1");

         String input = password;
         md.update(input.getBytes()); 
         byte[] output = md.digest();
         System.out.println();
         System.out.println("SHA1(\""+input+"\") =");
         System.out.println("   "+bytesToHex(output));


      } catch (Exception e) {
         System.out.println("Exception: "+e);
      }
   }
   public static String bytesToHex(byte[] b) {
      char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7',
                         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
      StringBuffer buf = new StringBuffer();
      for (int j=0; j<b.length; j++) {
         buf.append(hexDigit[(b[j] >> 4) & 0x0f]);
         buf.append(hexDigit[b[j] & 0x0f]);
      }
      return buf.toString();        
}
}
Mac hmacMd5 = Mac.getInstance("HMACMD5");