字节与字符串之间的转化
最近在研究国密bouncycastle国密加解密算法。
用的是csdn上 大神基于140的版本,我下载了163的最新版,发现好多ECPoint.getX()和ECPoint.getY()方法不存在,改成了ECPoint.getAffientX()(PS:这个函数什么意思,我也没有搞清楚……^_^)结果,运行测试用例失败,改成了140版本,结果成功了。
在测试用例中,发现加密后的byte字节,先转换成string,再转换成byte进行解密,出来的数据跟明文不一样,研究了半天,才发现问题出在这里。查阅了大神的方法,改成由BASE64Encoder转换成字符串。再由BASE64解码成字节。最后成功。可能是编码不同导致的。
正确代码如下:
// 国密规范正式私钥String prik = "3690655E33D5EA3D9A4AE1A1ADD766FDEA045CDEAA43A9206FB8C430CEFE0D94";// 国密规范正式公钥String pubk = "04F6E0C3345AE42B51E06BF50B98834988D54EBC7460FE135A48171BC0629EAE205EEDE253A530608178A98F1E19BB737302813BA39ED3FA3C51639D7A20C7391A";System.out.println("加密: ");byte[] cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);String data = new sun.misc.BASE64Encoder().encodeBuffer((cipherText));System.out.println(data);System.out.println("解密: ");byte[] t = new sun.misc.BASE64Decoder().decodeBuffer(data);byte[] decrypt = SM2Utils.decrypt(Util.hexToByte(prik), t);System.out.println("--------------------" + Util.byteToString(decrypt));String d = new String(SM2Utils.decrypt(Util.hexToByte(prik), cipherText));System.out.println(d);FileToByteArray.BetyToFile("F:" + File.separator + "0123.txt",d.getBytes());
之前错误的代码如下:
// 国密规范正式私钥String prik = "3690655E33D5EA3D9A4AE1A1ADD766FDEA045CDEAA43A9206FB8C430CEFE0D94";// 国密规范正式公钥String pubk = "04F6E0C3345AE42B51E06BF50B98834988D54EBC7460FE135A48171BC0629EAE205EEDE253A530608178A98F1E19BB737302813BA39ED3FA3C51639D7A20C7391A";System.out.println("加密: ");byte[] cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);String data = Util.byteToString(cipherText);System.out.println(data);System.out.println("解密: ");byte[] t = data.getBytes();byte[] decrypt = SM2Utils.decrypt(Util.hexToByte(prik), t);System.out.println("--------------------" + Util.byteToString(decrypt));String d = new String(SM2Utils.decrypt(Util.hexToByte(prik), cipherText));System.out.println(d);FileToByteArray.BetyToFile("F:" + File.separator + "0123.txt",d.getBytes());
其中Util.byteToString方法如下:
/*** 字节数组转为普通字符串(ASCII对应的字符)* * @param bytearray* byte[]* @return String*/public static String byteToString(byte[] bytearray) {String result = "";char temp;int length = bytearray.length;for (int i = 0; i < length; i++) {temp = (char) bytearray[i];result += temp;}return result;}
字节与字符串之间的转化相关推荐
- java fastjson vector转为json_java对象与Json字符串之间的转化(fastjson)
public class test { public static void main(string[] args) { // 实现java对象与json字符串之间的转化 // 1. person对象 ...
- java对象与Json字符串之间的转化(fastjson)
1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency><groupId>com.alibaba</groupId><artif ...
- 字符、字节、字符串之间的相互转换
字符与字符串 字符转字符串 String有两个char类型的构造函数 1.public String(char value[])//将字符数组中的所有内容变为字符串 char[] arr = {'a' ...
- js中的json对象和字符串之间的转化
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = ...
- 整型数与字符串之间的转化
atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 do ...
- json对象和json字符串之间的转化
json字符串----->json对象 使用JSON.parse()函数 var jsonStr = '{"name":"Winnie","ag ...
- UTC时间戳-时间字符串之间互相转化
1,标准时间准换成时间戳 int standard_to_stamp(char *str_time) { struct tm stm; int iY, iM ...
- 软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法
目录 软件的基本是要处理好"算法"及其基础(一): 流->计算机字->字符(包括某个数字.字母.符号和某个汉字等)->字符串->字节动态数组->字节- ...
- C#字节数组和字符数组与字符串之间的转换
1.marshal类,提供了一些方法集合,如分配非托管内存,拷贝非托管内存,转换托管和非托管类型,以及一些和非托管代码交互的杂类方法 //分配非托管内存 IntPtr hglobal = Marsha ...
最新文章
- 驰骋工作流程底层的API开发接口-重要的
- Java虚拟机运行时的数据区域
- 两分钟倒计时(Python)
- 前端学习(2169):vue-router安装和配置方式
- git cherry-pick 复制其他分支内容到当前分支
- 赞!图像生成PyTorch库火了,涵盖18+ SOTA GAN实现
- rman report list crosscheck delete -rman常用命令。
- 解决Azure中COULD NOT LOAD FILE OR ASSEMBLY问题
- C#控件的闪烁问题解决方法总结
- 照相馆里的魔术师-数码照片处理大全二
- mysql同步多主,MySQL多主一从同步配置
- python音乐推荐系统的设计与实现_个性化音乐推荐系统设计与实现
- 020.3.25普及C组 母鸡下蛋(hen)【纪中】【模拟】
- Angular sort descending
- 捷普服务器群组防护系统,捷普入侵防御系统
- C++ 输出cout
- 数学规划模型(一):数学规划模型的基本知识
- unity关于中文字体显示问题
- kotlin map和Json转换,Json解析
- html5游戏 美术,cocos2d-html5游戏学习之绘画小熊
热门文章
- 【算法学习】找素数的几种算法: 简单穷举, 埃氏筛法, 欧氏筛法, 从O(n2)到O(n)
- 零基础 6 个月学会英语 - 6 个月从 0 学会英语 - Chris Lonsdale - 学习视频
- qq飞车登录不上连接服务器未响应,QQ飞车手游无法登录怎么办 卡在登录界面无法进入...
- c语言线段树建树程序,C++算法 线段树
- 程序员一年工作经验之谈
- 谁说MAC原生无法玩游戏---START-腾讯云游戏-开启MAC,低配WIN以及TV玩网游新时代
- 【Turtle表白系列】你为什么还单身 ?因为昨天才遇见你。(爱心升级版本来袭)
- 给排水计算机应用参考文献,给排水专业专著参考文献 给排水专业外文文献怎么找...
- 谷歌seo外链预算方案,影响谷歌反向链接成本的因素
- 第一次ACM赛后总结及感悟