如何用java实现一个加密算法?(现有的这个是C写的,想要一个java的)菜鸟一个,求高手帮忙····
MAC的计算方法:in_str=”|A|B|C|”in_str_len{|A|B|C|}的长度mac_data是一个8位的校验码。具体方法如下:generat_mac_d...
MAC的计算方法:
in_str =”|A|B|C|”
in_str_len{|A|B|C|}的长度
mac_data是一个8位的校验码。具体方法如下:
generat_mac_data(in_str, in_str_len, mac_data)
char *in_str;
int in_str_len;
char mac_data[9];
{
int i, j, k, n, len;
char tmp_str[1024], result_str[9];
memset(result_str,0x00,8);
len = in_str_len;k = len % 8; n = 8 – k;
memcpy(tmp_str, in_str, len);
tmp_str[len]=0x7f;
memset(&tmp_str[ len + 1], 0x00, n);
len = len + n;
for(i=0;i<len;)
{
for(j=0;j<8;j++) {result_str[j] ^=tmp_str[i]; i=i+1;}
}
for(i=0;i<8;i++)
{
if(result_str[i]>=0x80)result_str[i] ^= 0x80;
if(result_str[i]==0x0d)result_str[i] = 0x4d;
if(result_str[i]==0x0a)result_str[i] = 0x4a;
if(result_str[i]==0x3a)result_str[i] = 0x7a;
if(result_str[i]==0x7c)result_str[i] = 0x3c;
if(result_str[i]==0x00)result_str[i] = 0x40;
}
memcpy(mac_data,result_str,8); return;
}
有哪位高人能看出来这个是什么算法? 是CRC8校验码? 展开
in_str =”|A|B|C|”
in_str_len{|A|B|C|}的长度
mac_data是一个8位的校验码。具体方法如下:
generat_mac_data(in_str, in_str_len, mac_data)
char *in_str;
int in_str_len;
char mac_data[9];
{
int i, j, k, n, len;
char tmp_str[1024], result_str[9];
memset(result_str,0x00,8);
len = in_str_len;k = len % 8; n = 8 – k;
memcpy(tmp_str, in_str, len);
tmp_str[len]=0x7f;
memset(&tmp_str[ len + 1], 0x00, n);
len = len + n;
for(i=0;i<len;)
{
for(j=0;j<8;j++) {result_str[j] ^=tmp_str[i]; i=i+1;}
}
for(i=0;i<8;i++)
{
if(result_str[i]>=0x80)result_str[i] ^= 0x80;
if(result_str[i]==0x0d)result_str[i] = 0x4d;
if(result_str[i]==0x0a)result_str[i] = 0x4a;
if(result_str[i]==0x3a)result_str[i] = 0x7a;
if(result_str[i]==0x7c)result_str[i] = 0x3c;
if(result_str[i]==0x00)result_str[i] = 0x40;
}
memcpy(mac_data,result_str,8); return;
}
有哪位高人能看出来这个是什么算法? 是CRC8校验码? 展开
展开全部
import java.io.*; //引入io包
public class TxtEncrypt
{
public static void main(String args[ ]) //主函数
{
System.out.println("输入一个字符作为密钥:");
char key = System.in.read();//等待用户输入一个字符作为密钥
File fileOne=new File("hello.txt"), //要加密的文件
fileTwo=new File("hello.secret");//加密后的文件
char b[]=new char[100]; //缓冲字符数组
try{
FileReader in=new FileReader(fileOne); //创建读文件流,也可以叫文件输入流
FileWriter out=new FileWriter(fileTwo); //创建写文件流,也可以叫文件输出流
int n=-1; //定义变量,存放read读的返回值
while((n=in.read(b))!=-1) //如果变量n为-1,则文件到达末尾
{
for(int i=0;i<n;i++) //循环,从字符数组b中读取字符
{
b[i]=(char)(b[i]^key); //加密,讲字符数组b中的每个字符跟a异或,然后放入b中
}
out.write(b,0,n); //然后把b中的所有字符写入到writer流中,也就是hello.secret文件中
}
out.close(); //读完之后,关闭输出流
in=new FileReader(fileTwo); //创建hello.secret文件的读文件流
System.out.println("加密后的文件内容:"); //输出字符串
while((n=in.read(b))!=-1) //当文件没有到达末尾,一直执行下面的循环体
{
String str=new String(b,0,n); //把b中的字符放入字符串变量str中
System.out.println(str); //输出str中的值 (整个循环的意思是把加密后的文件输出到屏幕上)
}
in=new FileReader(fileTwo); //创建hello.secret文件的读文件流
System.out.println("解密后的文件内容:"); //输出字符串
while((n=in.read(b))!=-1) //当文件没有到达末尾,一直执行下面的循环体
{
for(int i=0;i<n;i++) //for循环
{
b[i]=(char)(b[i]^key); //把b字符数组中的每个字符跟a异或(同一个字符异或两次之后,得到原来的字符)
}
System.out.println(new String(b,0,n)); //输出b中的所有字符
}
in.close(); //关闭输入流
}
catch(IOException e)
{
System.out.println(e); //捕获io异常
}
}
}
public class TxtEncrypt
{
public static void main(String args[ ]) //主函数
{
System.out.println("输入一个字符作为密钥:");
char key = System.in.read();//等待用户输入一个字符作为密钥
File fileOne=new File("hello.txt"), //要加密的文件
fileTwo=new File("hello.secret");//加密后的文件
char b[]=new char[100]; //缓冲字符数组
try{
FileReader in=new FileReader(fileOne); //创建读文件流,也可以叫文件输入流
FileWriter out=new FileWriter(fileTwo); //创建写文件流,也可以叫文件输出流
int n=-1; //定义变量,存放read读的返回值
while((n=in.read(b))!=-1) //如果变量n为-1,则文件到达末尾
{
for(int i=0;i<n;i++) //循环,从字符数组b中读取字符
{
b[i]=(char)(b[i]^key); //加密,讲字符数组b中的每个字符跟a异或,然后放入b中
}
out.write(b,0,n); //然后把b中的所有字符写入到writer流中,也就是hello.secret文件中
}
out.close(); //读完之后,关闭输出流
in=new FileReader(fileTwo); //创建hello.secret文件的读文件流
System.out.println("加密后的文件内容:"); //输出字符串
while((n=in.read(b))!=-1) //当文件没有到达末尾,一直执行下面的循环体
{
String str=new String(b,0,n); //把b中的字符放入字符串变量str中
System.out.println(str); //输出str中的值 (整个循环的意思是把加密后的文件输出到屏幕上)
}
in=new FileReader(fileTwo); //创建hello.secret文件的读文件流
System.out.println("解密后的文件内容:"); //输出字符串
while((n=in.read(b))!=-1) //当文件没有到达末尾,一直执行下面的循环体
{
for(int i=0;i<n;i++) //for循环
{
b[i]=(char)(b[i]^key); //把b字符数组中的每个字符跟a异或(同一个字符异或两次之后,得到原来的字符)
}
System.out.println(new String(b,0,n)); //输出b中的所有字符
}
in.close(); //关闭输入流
}
catch(IOException e)
{
System.out.println(e); //捕获io异常
}
}
}
展开全部
java啥没有,从base64,md5,到数字签名都有,你这个应该是MAC算法,java都有这个类...
楼上说的对,参见java.security 包,百度一下java加密多得是
楼上说的对,参见java.security 包,百度一下java加密多得是
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java有自己规范的加密方式。参见java.security 包
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询