Re为什么java服务器把加签结果返给客户端,总说signature不匹配!!!!!
献上源码:
Client:
ossService.setGlobalDefaultTokenGenerator(new TokenGenerator() { // 璁剧疆鍏ㄥ眬榛樿鍔犵鍣�
@Override
public String generateToken(String httpMethod, String md5, String type, String date,
String ossHeaders, String resource) {
String content = httpMethod + "\n" + md5 + "\n" + type + "\n" + date + "\n" + ossHeaders
+ resource;
try {
//Create a socket to connect to the server
Socket socket=new Socket(serverUri,8000);
//Create an input stream to receive data from the server
fromServer=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(fromServer));
//Create an output stream to send data from the server
toServer=socket.getOutputStream();
PrintWriter printWriter=new PrintWriter(toServer);
content=content.replace('\n', '!');
content=content+"\n";
//Send content to server
printWriter.write(content);
//Test
textView1.setText("content has been already sent.It's value is "+content);
printWriter.flush();
//Recieve signature from server
while (true) {
signResult=bufferedReader.readLine().trim();
if(signResult!=null){
//Test
textView2.setText("Signature has already recieved.It's value is "+signResult);
break;
}
}
fromServer.close();
bufferedReader.close();
toServer.close();
printWriter.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//return "OSS " + accessKey + ":" + signature; // 注意"OSS"和accessKey之间存在一个空格!!!
return signResult;
}
});
Server:
public static void main(String[] args) throws NoSuchAlgorithmException,InvalidKeyException{
try{
//Create a server socket
serverSocket=new ServerSocket(8000);
//Listen for a connection request
socket=serverSocket.accept();
//Create data input and output streams
inputFromClient=socket.getInputStream();
bufferedReader=new BufferedReader(new InputStreamReader(inputFromClient));
outputToClient=socket.getOutputStream();
printWriter=new PrintWriter(outputToClient);
while (true) {
//Receive radius from the client
String getContent=bufferedReader.readLine();
//Test
if(getContent!=null){
getContent=getContent.replace('!', '\n');
System.out.println("Recieved content successful! It's:"+getContent);
//getContent=getContent.substring(0,getContent.length()-2);
//Encode
String signResult=null;
try {
//signResult=OSSToolKit.generateToken(accessKey, secretKey, getContent);
HmacSHA1Signature hmacSHA1Signature=new HmacSHA1Signature();
signResult="OSS " + accessKey + ":"+hmacSHA1Signature.computeSignature(secretKey, getContent);
signResult=signResult.trim();
} catch (Exception e) {
// TODO: handle exception
OSSLog.logD(e.toString());
}
//Test
if(signResult!=null){
System.out.println("Encode signature successful! It's:"+signResult);
}else {
System.out.println("signature is null!");
}
//Send signature to the client
printWriter.write(signResult);
System.out.println("Send signature is successful!");
printWriter.flush();
break;
}
}
inputFromClient.close();
bufferedReader.close();
outputToClient.close();
printWriter.close();
socket.close();
serverSocket.close();
}
catch(IOException e){
e.printStackTrace();
}
}
-------------------------
回2楼徇云一五的帖子
官方的java代码,你是指 客户端+服务器 都是pc的方式。我跑过了,没问题的。而且 客户端+服务器 都是pc的方式并没有涉及到 服务器加签 操作。晕。。
-------------------------
回5楼qq449774982的帖子
你那边也是 android客户端,服务器加密签方式?服务器用java吗??
我java服务器也是用OSSToolKit.generateToken(accessKey, screctKey, content); 这个方法加密么??可是为什么一直返回null??