import lombok.NonNull ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.codec.digest.DigestUtils ;
import org.apache.commons.lang3.StringUtils ;
import play.Logger ;
import java.util.* ;
@Slf4j
public class UniwebSignature {
private static final String charset
= "UTF8" ;
return DigestUtils.sha256Hex ( text) .toLowerCase ( ) ;
}
/**
* verify signature for the parameters
*/
public static boolean verifySign
( Map
< String , Object
> params,
String privateKey
) { List< String> keys = new ArrayList<> ( params.keySet ( ) ) ;
HashMap
< String , Object
> verifyMap
= new HashMap
<> ( ) ;
String val
= params.
get ( name
) .
toString ( ) ; if ( val == null || val.isEmpty ( ) ) {
Logger.
warn ( String .
format ( "Empty Value detected when createURL. key = %s" , name
) ) ; verifyMap.put ( name, "" ) ;
continue ;
}
if ( ! StringUtils.equals ( name, "signature" ) && ! StringUtils.equals ( name, "sign_type" ) ) {
verifyMap.put ( name, val) ;
//params.put(name, URLDecoder.decode(val, input_charset));
}
}
String sign
= sign
( getContentToSign
( verifyMap, privateKey
) ) ; String signCode
= params.
get ( "signature" ) .
toString ( ) ; return StringUtils.equals ( sign, signCode) ;
}
String prestr
= getFirstPart
( params
) ; prestr += "&shared_key=" + privateKey;
return prestr;
}
public static String getFirstPart
( Map
< String , Object
> params
) { List< String> keys = new ArrayList< String> ( params.keySet ( ) ) ;
for ( int i = 0 ; i < keys.size ( ) ; i++ ) {
String key
= "" + keys.
get ( i
) ; String value
= "" + params.
get ( key
) ;
if ( i == keys.size ( ) - 1 ) {
prestr = prestr + key + "=" + value;
} else {
prestr = prestr + key + "=" + value + "&" ;
}
}
return prestr;
}
public static void main
( String [ ] args
) { String privateKey
= "<(98c|Tz_([:]Uh/#~N.tY5Xt-$U!N@@Wg0S^qs\" fHPsMv~Xn{#dTgm`@2U_]MzS_bLN;Wq_|rzU>x:" ; Map
< String , Object
> params
= new HashMap
<> ( ) ; params.put ( "service" , "uniweb.spot.cancel" ) ;
params.put ( "company" , "6" ) ;
params.put ( "transaction" , "000060811880018" ) ;
params.put ( "nonce" , "94759888668886k66866j8676866ca5" ) ;
String text
= UniwebSignature.
getContentToSign ( params, privateKey
) ; String sign
= UniwebSignature.
sign ( text
) ;
}
}
CgppbXBvcnQgbG9tYm9rLk5vbk51bGw7CmltcG9ydCBsb21ib2suZXh0ZXJuLnNsZjRqLlNsZjRqOwppbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLmRpZ2VzdC5EaWdlc3RVdGlsczsKaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKaW1wb3J0IHBsYXkuTG9nZ2VyOwoKaW1wb3J0IGphdmEudXRpbC4qOwoKCgpAU2xmNGoKcHVibGljIGNsYXNzIFVuaXdlYlNpZ25hdHVyZSB7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY2hhcnNldCA9ICJVVEY4IjsKCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBzaWduKEBOb25OdWxsIFN0cmluZyB0ZXh0KSB7CiAgICAgICAgcmV0dXJuIERpZ2VzdFV0aWxzLnNoYTI1NkhleCh0ZXh0KS50b0xvd2VyQ2FzZSgpOwogICAgfQoKICAgIC8qKgogICAgICogdmVyaWZ5IHNpZ25hdHVyZSBmb3IgdGhlIHBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBib29sZWFuIHZlcmlmeVNpZ24oTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMsIFN0cmluZyBwcml2YXRlS2V5KSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IGtleXMgPSBuZXcgQXJyYXlMaXN0PD4ocGFyYW1zLmtleVNldCgpKTsKICAgICAgICBIYXNoTWFwPFN0cmluZywgT2JqZWN0PiB2ZXJpZnlNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgQ29sbGVjdGlvbnMuc29ydChrZXlzKTsKICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDoga2V5cykgewoKICAgICAgICAgICAgU3RyaW5nIHZhbCA9IHBhcmFtcy5nZXQobmFtZSkudG9TdHJpbmcoKTsKICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgIExvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIkVtcHR5IFZhbHVlIGRldGVjdGVkIHdoZW4gY3JlYXRlVVJMLiBrZXkgPSAlcyIsIG5hbWUpKTsKICAgICAgICAgICAgICAgIHZlcmlmeU1hcC5wdXQobmFtZSwgIiIpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlscy5lcXVhbHMobmFtZSwgInNpZ25hdHVyZSIpICYmICFTdHJpbmdVdGlscy5lcXVhbHMobmFtZSwgInNpZ25fdHlwZSIpKSB7CiAgICAgICAgICAgICAgICB2ZXJpZnlNYXAucHV0KG5hbWUsIHZhbCk7CiAgICAgICAgICAgICAgICAvL3BhcmFtcy5wdXQobmFtZSwgVVJMRGVjb2Rlci5kZWNvZGUodmFsLCBpbnB1dF9jaGFyc2V0KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIFN0cmluZyBzaWduID0gc2lnbihnZXRDb250ZW50VG9TaWduKHZlcmlmeU1hcCwgcHJpdmF0ZUtleSkpOwogICAgICAgIFN0cmluZyBzaWduQ29kZSA9IHBhcmFtcy5nZXQoInNpZ25hdHVyZSIpLnRvU3RyaW5nKCk7CiAgICAgICAgcmV0dXJuIFN0cmluZ1V0aWxzLmVxdWFscyhzaWduLCBzaWduQ29kZSk7CiAgICB9CgoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRlbnRUb1NpZ24oTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMsIFN0cmluZyBwcml2YXRlS2V5KSB7CiAgICAgICAgU3RyaW5nIHByZXN0ciA9IGdldEZpcnN0UGFydChwYXJhbXMpOwogICAgICAgIHByZXN0ciArPSAiJnNoYXJlZF9rZXk9IiArIHByaXZhdGVLZXk7CiAgICAgICAgcmV0dXJuIHByZXN0cjsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaXJzdFBhcnQoTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMpIHsKICAgICAgICBMaXN0PFN0cmluZz4ga2V5cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihwYXJhbXMua2V5U2V0KCkpOwogICAgICAgIENvbGxlY3Rpb25zLnNvcnQoa2V5cyk7CgogICAgICAgIFN0cmluZyBwcmVzdHIgPSAiIjsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIFN0cmluZyBrZXkgPSAiIiArIGtleXMuZ2V0KGkpOwogICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSAiIiArIHBhcmFtcy5nZXQoa2V5KTsKCiAgICAgICAgICAgIGlmIChpID09IGtleXMuc2l6ZSgpIC0gMSkgewogICAgICAgICAgICAgICAgcHJlc3RyID0gcHJlc3RyICsga2V5ICsgIj0iICsgdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwcmVzdHIgPSBwcmVzdHIgKyBrZXkgKyAiPSIgKyB2YWx1ZSArICImIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHByZXN0cjsKICAgIH0KCgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN0cmluZyBwcml2YXRlS2V5ID0gIjwoOThjfFR6XyhbOl1VaC8jfk4udFk1WHQtJFUhTkBAV2cwU15xc1wiZkhQc012flhueyNkVGdtYEAyVV9dTXpTX2JMTjtXcV98cnpVPng6IjsKICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICBwYXJhbXMucHV0KCJzZXJ2aWNlIiwgInVuaXdlYi5zcG90LmNhbmNlbCIpOwogICAgICAgIHBhcmFtcy5wdXQoImNvbXBhbnkiLCAiNiIpOwogICAgICAgIHBhcmFtcy5wdXQoInRyYW5zYWN0aW9uIiwgIjAwMDA2MDgxMTg4MDAxOCIpOwogICAgICAgIHBhcmFtcy5wdXQoIm5vbmNlIiwgIjk0NzU5ODg4NjY4ODg2azY2ODY2ajg2NzY4NjZjYTUiKTsKCgogICAgICAgIFN0cmluZyB0ZXh0ID0gVW5pd2ViU2lnbmF0dXJlLmdldENvbnRlbnRUb1NpZ24ocGFyYW1zLCBwcml2YXRlS2V5KTsKICAgICAgICBTdHJpbmcgc2lnbiA9IFVuaXdlYlNpZ25hdHVyZS5zaWduKHRleHQpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzaWduKTsKCiAgICB9Cn0=
compilation info
Main.java:14: error: class UniwebSignature is public, should be declared in a file named UniwebSignature.java
public class UniwebSignature {
^
Main.java:3: error: package lombok does not exist
import lombok.NonNull;
^
Main.java:4: error: package lombok.extern.slf4j does not exist
import lombok.extern.slf4j.Slf4j;
^
Main.java:5: error: package org.apache.commons.codec.digest does not exist
import org.apache.commons.codec.digest.DigestUtils;
^
Main.java:6: error: package org.apache.commons.lang3 does not exist
import org.apache.commons.lang3.StringUtils;
^
Main.java:7: error: package play does not exist
import play.Logger;
^
Main.java:13: error: cannot find symbol
@Slf4j
^
symbol: class Slf4j
Main.java:17: error: cannot find symbol
public static String sign(@NonNull String text) {
^
symbol: class NonNull
location: class UniwebSignature
Main.java:18: error: cannot find symbol
return DigestUtils.sha256Hex(text).toLowerCase();
^
symbol: variable DigestUtils
location: class UniwebSignature
Main.java:32: error: cannot find symbol
Logger.warn(String.format("Empty Value detected when createURL. key = %s", name));
^
symbol: variable Logger
location: class UniwebSignature
Main.java:36: error: cannot find symbol
if (!StringUtils.equals(name, "signature") && !StringUtils.equals(name, "sign_type")) {
^
symbol: variable StringUtils
location: class UniwebSignature
Main.java:36: error: cannot find symbol
if (!StringUtils.equals(name, "signature") && !StringUtils.equals(name, "sign_type")) {
^
symbol: variable StringUtils
location: class UniwebSignature
Main.java:44: error: cannot find symbol
return StringUtils.equals(sign, signCode);
^
symbol: variable StringUtils
location: class UniwebSignature
13 errors
stdout